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

          常用鏈接

          留言簿(4)

          隨筆分類(66)

          隨筆檔案(72)

          文章檔案(19)

          收藏夾

          搜索

          •  

          最新評論

          閱讀排行榜

          評論排行榜

          Ibatis介紹與用例

           

          一、介紹

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

           

          二、用例

           

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



          2、創(chuàng)建一個WEB Project項目,新建包com.ibatis.sample.config.以下的新創(chuàng)建文件都是在這個包下進(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>

           說明:創(chuàng)建setting屬性,創(chuàng)建數(shù)據(jù)庫鏈接,配置sqlMap數(shù)據(jù)庫映射文件。這里引用參數(shù)配置文件db.properties,使用參數(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實體類,Area.javaDefine_industry.java,對應(yīng)數(shù)據(jù)庫中表中的字段

          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)建針對Area對象和Define_industry對象的CRUD的xml映射配置:Area.xml和industry.xml

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

          <?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> 來支持主鍵自動生成,并把值寫入相應(yīng)的keyproperty對應(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).可以看出通過<insert><delete><update><select>四個節(jié)點,分別定義對象的增刪改查(CRUD)操作。其次,還有<Procesure>節(jié)點,用于存儲過程的操作。

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

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

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

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

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

           

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

          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();//開始事務(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> 來支持主鍵自動生成,并可以通過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 參數(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實例。

          SqlMapClient

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

           

           

           

           

          posted on 2014-01-07 15:50 kelly 閱讀(373) 評論(0)  編輯  收藏 所屬分類: java 框架
          主站蜘蛛池模板: 钦州市| 思茅市| 虎林市| 甘洛县| 巴林左旗| 莱西市| 汶川县| 丰原市| 黑河市| 临汾市| 沙湾县| 若尔盖县| 镇远县| 广昌县| 织金县| 饶河县| 同德县| 松江区| 宝应县| 湄潭县| 宁安市| 县级市| 乌拉特前旗| 宜兰县| 桃江县| 永昌县| 新建县| 延川县| 双鸭山市| 津市市| 东兰县| 宽甸| 泽普县| 乌兰察布市| 龙口市| 南平市| 滨州市| 克东县| 定边县| 大悟县| 交城县|