<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 框架
    主站蜘蛛池模板: 精品免费AV一区二区三区| 永久免费毛片手机版在线看| 蜜芽亚洲av无码一区二区三区| 亚洲AV日韩AV天堂久久| 亚洲国产香蕉人人爽成AV片久久 | 99热这里只有精品免费播放| 色窝窝亚洲AV网在线观看| 亚洲人成在线免费观看| 亚洲av无码av制服另类专区| 亚洲第一区在线观看| 日本人的色道www免费一区| 美女被免费喷白浆视频| 久久成人a毛片免费观看网站| 手机永久免费的AV在线电影网| 亚洲va久久久久| 亚洲网站在线播放| 亚洲AV无码第一区二区三区| 2048亚洲精品国产| 日韩免费高清视频| 成人免费在线观看网站| 久久久久久免费视频| 人与禽交免费网站视频| 在线免费中文字幕| 91精品免费高清在线| 久久精品视频免费看| 男女午夜24式免费视频| 丝袜足液精子免费视频| 久久国产一片免费观看| 国产免费播放一区二区| 国产精品无码免费专区午夜| 国产高清视频免费在线观看| 一本久久免费视频| 久久久久久毛片免费看| 成人毛片100免费观看| 99re6在线精品免费观看| 99热在线日韩精品免费| 男女作爱在线播放免费网站| 久久久久成人精品免费播放动漫| 无码人妻一区二区三区免费n鬼沢| 久久国产乱子伦精品免费看| 一个人免费日韩不卡视频|