<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)

    收藏夾

    搜索

    •  

    最新評(píng)論

    閱讀排行榜

    評(píng)論排行榜

    Ibatis介紹與用例

     

    一、介紹

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

     

    二、用例

     

    1、需要的jar包,以oracle數(shù)據(jù)為例,可以到mybatis官網(wǎng)去下載



    2、創(chuàng)建一個(gè)WEB Project項(xiàng)目,新建包com.ibatis.sample.config.以下的新創(chuàng)建文件都是在這個(gè)包下進(jìn)行創(chuàng)建。

    3、創(chuàng)建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>

     說(shuō)明:創(chuàng)建setting屬性,創(chuàng)建數(shù)據(jù)庫(kù)鏈接,配置sqlMap數(shù)據(jù)庫(kù)映射文件。這里引用參數(shù)配置文件db.properties,使用參數(shù)時(shí)用 ${參數(shù)名} 的方式引用參數(shù)值

    4創(chuàng)建參數(shù)配置文件db.properties,可以在SqlMapConfig.xml直接引用

     

    driver=oracle.jdbc.driver.OracleDriver

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

    user=dev

    password=easycode2008

     

    5、創(chuàng)建POJO實(shí)體類,Area.javaDefine_industry.java,對(duì)應(yīng)數(shù)據(jù)庫(kù)中表中的字段

    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、創(chuàng)建針對(duì)Area對(duì)象和Define_industry對(duì)象的CRUD的xml映射配置:Area.xml和industry.xml

    Area.xml主要以查詢?yōu)橹髯雠e例說(shuō)明,代碼如下

    <?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> 來(lái)支持主鍵自動(dòng)生成,并把值寫入相應(yīng)的keyproperty對(duì)應(yīng)的字段中-->

           <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).可以看出通過(guò)<insert><delete><update><select>四個(gè)節(jié)點(diǎn),分別定義對(duì)象的增刪改查(CRUD)操作。其次,還有<Procesure>節(jié)點(diǎn),用于存儲(chǔ)過(guò)程的操作。

    2)ID: 指定了操作ID,之后我們可以在代碼中通過(guò)指定操作id 來(lái)執(zhí)行此節(jié)點(diǎn)所定義的操作. 3)ParameterClass: 指定了操作所需的參數(shù)類型

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

    通過(guò)<![CDATA[……]]>節(jié)點(diǎn),可以避免SQL 中與XML 規(guī)范相沖突的字符對(duì)

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

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

     

    7、創(chuàng)建測(cè)試程序

    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();//開(kāi)始事務(wù)

                  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> 來(lái)支持主鍵自動(dòng)生成,并可以通過(guò)get方法取得值=======

    //            Define_industry industry=new Define_industry();

    //            industry.setTitle("測(cè)試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 參數(shù)是按照parameterMapproperty順序進(jìn)行填裝的---------------

                  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();//提交事務(wù)

               }finally{

                  sqlMap.endTransaction();

               }
           } catch (IOException e) {

               e.printStackTrace(); 

           } catch (SQLException e1){

               e1.printStackTrace();   

           }

        }

    }

     

     

    XmlSqlMapClientBuilder

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

    版本中的XmlSqlMapBuilder。其作用是根據(jù)配置文件創(chuàng)建SqlMapClient實(shí)例。

    SqlMapClient

    SqlMapClientibatis的核心組件,提供數(shù)據(jù)操作的基礎(chǔ)平臺(tái)

     

     

     

     

    posted on 2014-01-07 15:50 kelly 閱讀(379) 評(píng)論(0)  編輯  收藏 所屬分類: java 框架
    主站蜘蛛池模板: 久久精品国产免费观看| 女人毛片a级大学毛片免费| 日产亚洲一区二区三区| 亚洲an日韩专区在线| 妇女自拍偷自拍亚洲精品| 久久午夜夜伦鲁鲁片无码免费| 国产高清不卡免费视频| 黄网址在线永久免费观看 | 亚洲成a人无码亚洲成www牛牛| 久青草视频在线观看免费| 99久久免费国产特黄| 成人午夜免费福利视频| 久久国产成人精品国产成人亚洲| 亚洲伊人色一综合网| 亚洲日本天堂在线| 免费高清A级毛片在线播放| 99ee6热久久免费精品6| 亚洲高清偷拍一区二区三区 | 亚洲av无码国产综合专区| 国产黄在线播放免费观看| 成年女人视频网站免费m| 国产亚洲精品国产| 亚洲视频中文字幕在线| 国产成人精品日本亚洲网址| 日本亚洲高清乱码中文在线观看| 99国产精品免费观看视频| 亚洲乱码中文字幕综合234| 亚洲人成黄网在线观看| 国产精品偷伦视频观看免费| 免费少妇a级毛片人成网| 亚洲免费二区三区| 无码免费一区二区三区免费播放| 4hu四虎最新免费地址| 不卡精品国产_亚洲人成在线| 亚洲国产精品网站在线播放 | 免费精品国产日韩热久久| 亚洲乱码日产一区三区| 免费大片av手机看片| 在线观看人成视频免费| 亚洲午夜国产精品无卡| 国产精品白浆在线观看免费|