<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆 - 72  文章 - 28  trackbacks - 0
    <2014年1月>
    2930311234
    567891011
    12131415161718
    19202122232425
    2627282930311
    2345678

    常用鏈接

    留言簿(4)

    隨筆分類(66)

    隨筆檔案(72)

    文章檔案(19)

    收藏夾

    搜索

    •  

    最新評論

    閱讀排行榜

    評論排行榜

    Ibatis介紹與用例

     

    一、介紹

    ibatis 是一種“半自動化”的ORM實現。iBATIS是以SQL為中心的持久化層框架。能支持懶加載、關聯查詢、繼承等特性。iBATIS不同于一般的OR映射框架(eg:hibernate)。OR映射框架,將數據庫表、字段等映射到類、屬性,那是一種元數據(meta-data)映射。iBATIS則是將SQL查詢的參數和結果集映射到類。因此可以說,iBATIS做的是SQL Mapping的工作。它把SQL語句看成輸入以及輸出,結果集就是輸出,而where后面的條件參數則是輸入。iBATIS能將輸入的普通POJO對象、Map、XML等映射到SQL的條件參數上,同時也可以將查詢結果映射到普通POJO對象(集合)、Map、XML等上面。iBATIS使用xml文件來映射這些輸入以及輸出。能大大減少數據庫存儲部分的代碼量,而且可以非常方便的利用SQL中的一些小技巧。

     

    二、用例

     

    1、需要的jar包,以oracle數據為例,可以到mybatis官網去下載



    2、創建一個WEB Project項目,新建包com.ibatis.sample.config.以下的新創建文件都是在這個包下進行創建。

    3、創建ibatis的配置文件,SqlMapConfig.xml,代碼如下:

    <?xml version="1.0" encoding="UTF-8"?>

    <!DOCTYPE sqlMapConfig         

        PUBLIC "-//ibatis.apache.org//DTD SQL Map Config 2.0//EN"         

        "http://ibatis.apache.org/dtd/sql-map-config-2.dtd">      

    <sqlMapConfig>

        <properties resource="com/ibatis/sample/config/db.properties" />

        <settings   

            cacheModelsEnabled="true"  

            enhancementEnabled="true" 

            lazyLoadingEnabled="true"   

            errorTracingEnabled="true"   

            maxRequests="32"   

            maxSessions="10"   

            maxTransactions="5"   

            useStatementNamespaces="false"   

          />       

     <transactionManager type="JDBC">   

       <dataSource type="SIMPLE">   

          <property name="JDBC.Driver" value="${driver}"/>   

          <property name="JDBC.ConnectionURL" value="${url}"/>   

          <property name="JDBC.Username" value="${user}"/>   

          <property name="JDBC.Password" value="${password}"/>

          <!-- <property name="JDBC.DefaultAutoCommit" value="true"/> -->  

          <property name="Pool.MaximumActiveConnections" value="10"/>   

          <property name="Pool.MaximumIdleConnections" value="5"/>   

          <property name="Pool.MaximumCheckoutTime" value="9000"/>   

          <property name="Pool.TimeToWait" value="10000"/>   

          <property name="Pool.PingQuery" value="select 1 from dual"/>   

          <property name="Pool.PingEnabled" value="true"/>   

          <property name="Pool.PingConnectionsOlderThan" value="0"/>   

          <property name="Pool.PingConnectionsNotUsedFor" value="3600000"/>   

          <property name="Pool.QuietMode" value="true"/>   

        </dataSource>       

     </transactionManager>

     <sqlMap resource="com/ibatis/sample/config/Area.xml"/> 

     <sqlMap resource="com/ibatis/sample/config/Industry.xml"/> 

    </sqlMapConfig>

     說明:創建setting屬性,創建數據庫鏈接,配置sqlMap數據庫映射文件。這里引用參數配置文件db.properties,使用參數時用 ${參數名} 的方式引用參數值

    4創建參數配置文件db.properties,可以在SqlMapConfig.xml直接引用

     

    driver=oracle.jdbc.driver.OracleDriver

    url=jdbc:oracle:thin:@192.168.1.18:1521:CMEBP

    user=dev

    password=easycode2008

     

    5、創建POJO實體類,Area.javaDefine_industry.java,對應數據庫中表中的字段

    Area.java代碼:

     

    package com.ibatis.sample.config;

    import java.io.Serializable;

    public class Area implements Serializable{

        private int area_id;

        private String province;

        private String area;

        private String code;

        private String regdate;

          public int getArea_id() {

           return area_id;

        }

        public void setArea_id(int areaId) {

           area_id = areaId;

        }

        public String getProvince() {

           return province;

        }

        public void setProvince(String province) {

           this.province = province;

        }

        public String getArea() {

           return area;

        }

        public void setArea(String area) {

           this.area = area;

        }

        public String getCode() {

           return code;

        }

        public void setCode(String code) {

           this.code = code;

        }

        public String getRegdate() {

           return regdate;

        }

        public void setRegdate(String regdate) {

           this.regdate = regdate;

        } 

    }

     

    Define_industry.java代碼:

    package com.ibatis.sample.config;

     import java.io.Serializable;

    public class Define_industry implements Serializable{

        private int industry_id;

        private String title;  

        public Define_industry(){}; 

        public Define_industry(int industry_id,String title){

           this.industry_id=industry_id;

           this.title=title;

        }

        public int getIndustry_id() {

           return industry_id;

        }

        public void setIndustry_id(int industryId) {

           industry_id = industryId;

        }

        public String getTitle() {

           return title;

        }

        public void setTitle(String title) {

           this.title = title;

        }

    }

     

    6、創建針對Area對象和Define_industry對象的CRUD的xml映射配置:Area.xml和industry.xml

    Area.xml主要以查詢為主做舉例說明,代碼如下

    <?xml version="1.0" encoding="UTF-8"?>

    <!DOCTYPE sqlMap   PUBLIC "-//iBATIS.com//DTD SQL Map 2.0//EN" 

    "http://www.ibatis.com/dtd/sql-map-2.dtd">  

    <sqlMap namespace="Area">

        <typeAlias alias="area" type="com.ibatis.sample.config.Area"/> 

        <select id="getArea" parameterClass="int" resultClass="area">

           <![CDATA[

           select province,area,code,to_char(regdate,'yyyy-mm-dd') as regdate from DEFINE_AREA where area_id=#id#

           ]]>

        </select>  

        <select id="getArealist" resultClass="area">

           <![CDATA[

           select * from DEFINE_AREA

           ]]>

        </select> 

        <select id="getArealist1" parameterClass="String" resultClass="area">

           <![CDATA[

           select area_id, province,area,code from DEFINE_AREA where area like '%'||#are#||'%'

           ]]>

        </select>  

        <resultMap id="get_area_result" class="area">

           <result property="area_id" column="area_id" jdbcType="NUMBER" javaType="int"/>

           <result property="area" column="area" jdbcType="VARCHAR" javaType="String"/>

        </resultMap>  

        <select id="getArealist2" parameterClass="area" resultMap="get_area_result">    

           select area_id, province,area,code from DEFINE_AREA

           <dynamic prepend="where">

             <isNotEmpty prepend="and" property="area">

                 area like '%'||#area#||'%'

             </isNotEmpty> 

            </dynamic>        

        </select>

    </sqlMap>

     

    Industry.xml主要以增刪改為主

    <?xml version="1.0" encoding="UTF-8"?>

    <!DOCTYPE sqlMap   PUBLIC "-//iBATIS.com//DTD SQL Map 2.0//EN" 

    "http://www.ibatis.com/dtd/sql-map-2.dtd"> 

    <sqlMap namespace="Industry">

        <typeAlias alias="industry" type="com.ibatis.sample.config.Define_industry"/>

        <select id="get_industryid" resultClass="int">

           <![CDATA[

           select seq_define_industry.nextval from dual

           ]]>

        </select> 

        <insert id="insertIndustry" parameterClass="industry">

           <!-- <insert> 元素的子元素 < selectKey> 來支持主鍵自動生成,并把值寫入相應的keyproperty對應的字段中-->

           <selectKey resultClass="java.lang.Integer" keyProperty="industry_id" >

                    select seq_define_industry.nextval from dual        

           </selectKey>    

           insert into DEFINE_INDUSTRY(industry_id,title) values(#industry_id#,#title#)   

        </insert> 

        <update id="updateIndustry" parameterClass="industry">

           update DEFINE_INDUSTRY set title=#title# where industry_id=#industry_id#

        </update>  

        <delete id="delIndustry" parameterClass="int">

           delete from DEFINE_INDUSTRY where industry_id=#industry_id#

        </delete> 

    <parameterMap id="login_pro" class="map">

    <parameter property="id" jdbcType="VARCHAR" javaType="java.lang.String" mode="IN"/> 

          <parameter property="pwd" jdbcType="VARCHAR" javaType="java.lang.String" mode="IN"/> 

          <parameter property="CompanyID" jdbcType="INTEGER" javaType="java.lang.Integer" mode="OUT"/> 

          <parameter property="companyname" jdbcType="VARCHAR" javaType="java.lang.String" mode="OUT"/>

          <parameter property="groupID" jdbcType="INTEGER" javaType="java.lang.Integer" mode="OUT"/> 

          <parameter property="group_desc" jdbcType="VARCHAR" javaType="java.lang.String" mode="OUT"/>

          <parameter property="selectLevel" jdbcType="VARCHAR" javaType="java.lang.String" mode="OUT"/>

          <parameter property="updateLevel" jdbcType="VARCHAR" javaType="java.lang.String" mode="OUT"/>

          <parameter property="addLelvel" jdbcType="VARCHAR" javaType="java.lang.String" mode="OUT"/>

          <parameter property="delelteLevel" jdbcType="VARCHAR" javaType="java.lang.String" mode="OUT"/>

          <parameter property="Account_id" jdbcType="INTEGER" javaType="java.lang.Integer" mode="OUT"/>

          <parameter property="Grade" jdbcType="INTEGER" javaType="java.lang.Integer" mode="OUT"/>

          <parameter property="account" jdbcType="VARCHAR" javaType="java.lang.String" mode="OUT"/>

          <parameter property="Name" jdbcType="VARCHAR" javaType="java.lang.String" mode="OUT"/>

          <parameter property="Mobile" jdbcType="VARCHAR" javaType="java.lang.String" mode="OUT"/>

          <parameter property="Result" jdbcType="INTEGER" javaType="java.lang.Integer" mode="OUT"/>

        </parameterMap>

        <procedure id="login_user" parameterMap="login_pro">   

           <![CDATA[{ call procedure_ecsystem_login(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) }]]>

        </procedure>

    </sqlMap>

     

    1).可以看出通過<insert><delete><update><select>四個節點,分別定義對象的增刪改查(CRUD)操作。其次,還有<Procesure>節點,用于存儲過程的操作。

    2)ID: 指定了操作ID,之后我們可以在代碼中通過指定操作id 來執行此節點所定義的操作. 3)ParameterClass: 指定了操作所需的參數類型

    4)<![CDATA[……]]>

    通過<![CDATA[……]]>節點,可以避免SQL 中與XML 規范相沖突的字符對

    XML映射文件的合法性造成影響。

    5). ResultClass: 指定了操作返回的參數類型

     

    7、創建測試程序

    package com.ibatis.sample.config;

    import java.io.IOException;

    import java.io.Reader;

    import java.sql.SQLException;

    import java.util.HashMap;

    import java.util.List;

    import java.util.Map;

    import com.ibatis.common.resources.Resources;

    import com.ibatis.sqlmap.client.SqlMapClient;

    import com.ibatis.sqlmap.client.SqlMapClientBuilder;

    public class ClientTest {

        private static final String Integer = null;

        public static void main(String args[]) {

           try {

               String resource = "com/ibatis/sample/config/SqlMapConfig.xml";

               Reader reader = Resources.getResourceAsReader (resource);

               SqlMapClient sqlMap = SqlMapClientBuilder.buildSqlMapClient(reader);

               try{

                  sqlMap.startTransaction();//開始事務

                  Area area =(Area)sqlMap.queryForObject("getArea",new Integer(5));

                  System.out.println(area.getProvince());

                  System.out.println(area.getArea());

                  System.out.println(area.getRegdate());         

                  List list=(List)sqlMap.queryForList("getArealist");

                  for (int i = 0; i < list.size(); i++) {

                      Area area1=(Area)list.get(i);

                      System.out.println(area1.getArea_id()+"--"+area1.getArea());

                  }         

                  List list1=(List)sqlMap.queryForList("getArealist1","");

                  for (int i = 0; i < list1.size(); i++) {

                      Area area1=(Area)list1.get(i);

                      System.out.println(area1.getArea_id()+"--"+area1.getArea());

                  }           

                  Area varea =new Area();

                  varea.setArea("");

                  List list2=(List)sqlMap.queryForList("getArealist2",varea);

                   for (int i = 0; i < list2.size(); i++) {

                      Area vmap=(Area)list2.get(i);

                      System.out.println("getArealist2="+vmap.getArea());

                  }           

    //            int id=((java.lang.Integer) sqlMap.queryForObject("get_industryid")).intValue();

    //            System.out.println(id);            

                  //=====<insert> 元素的子元素 < selectKey> 來支持主鍵自動生成,并可以通過get方法取得值=======

    //            Define_industry industry=new Define_industry();

    //            industry.setTitle("測試id");          

    //            sqlMap.insert("insertIndustry",industry);

    //            System.out.println("獲取插入的ID="+industry.getIndustry_id());           

                  Define_industry industry=new Define_industry(10,"其它");

                  int rownum=sqlMap.update("updateIndustry",industry);

                  System.out.println("rownum="+rownum);          

    //            sqlMap.delete("delIndustry",25);           

                  //-------procedure testing 參數是按照parameterMapproperty順序進行填裝的---------------

                  Map<String,String> paramMap=new HashMap<String, String>();

                  paramMap.put("id", "admin");

                  paramMap.put("pwd", "admin");

                  sqlMap.queryForObject("login_user",paramMap);

                  System.out.println(paramMap.get("companyname"));

                  System.out.println(String.valueOf(paramMap.get("Grade")));

                  System.out.println(paramMap.get("account"));

                  System.out.println(paramMap.get("Mobile"));

                  System.out.println(paramMap.get("Name"));

                sqlMap.commitTransaction();//提交事務

               }finally{

                  sqlMap.endTransaction();

               }
           } catch (IOException e) {

               e.printStackTrace(); 

           } catch (SQLException e1){

               e1.printStackTrace();   

           }

        }

    }

     

     

    XmlSqlMapClientBuilder

    XmlSqlMapClientBuilderibatis 2.0之后版本新引入的組件,用以替代1.x

    版本中的XmlSqlMapBuilder。其作用是根據配置文件創建SqlMapClient實例。

    SqlMapClient

    SqlMapClientibatis的核心組件,提供數據操作的基礎平臺

     

     

     

     

    posted on 2014-01-07 15:50 kelly 閱讀(371) 評論(0)  編輯  收藏 所屬分類: java 框架
    主站蜘蛛池模板: 老外毛片免费视频播放| 亚洲精品无码你懂的| 国产做国产爱免费视频| 国产三级免费电影| 美女一级毛片免费观看| 亚洲AⅤ视频一区二区三区| 成人a毛片视频免费看| 亚洲AⅤ无码一区二区三区在线| 亚洲hairy多毛pics大全| 精品国产免费一区二区| 亚洲丁香婷婷综合久久| 成人亚洲综合天堂| 美女被免费网站91色| 亚洲成AV人片在WWW色猫咪| 久久青草国产免费观看| 亚洲视频在线视频| 黄瓜视频影院在线观看免费| 美女视频黄免费亚洲| 免费少妇a级毛片| 美女视频黄的免费视频网页| 久久av无码专区亚洲av桃花岛| 久久久久久曰本AV免费免费| 中国china体内裑精亚洲日本| 日韩在线免费播放| 国产人成网在线播放VA免费| 亚洲av综合avav中文| 18禁网站免费无遮挡无码中文| 亚洲日韩精品无码专区| 亚洲国产精品一区二区九九| 免费久久人人爽人人爽av| 亚洲的天堂av无码| 国产一级淫片免费播放| 日韩av无码免费播放| 亚洲91精品麻豆国产系列在线| 国产免费无遮挡精品视频| 国内精品久久久久影院免费| 亚洲人成7777影视在线观看| 免费国产不卡午夜福在线| 日韩免费视频一区二区| 色偷偷噜噜噜亚洲男人| 久久久久亚洲AV成人无码网站|