ibatis入門教程

ibatis入門教程

博客分類:  
 
一、本文經過幾個簡單的示例,實現ibatis的增刪改查的功能。   二、構建數據庫表,contact表,建表語句以下:(使用的是mysql數據庫)  contact表: 
Java代碼   收藏代碼
  1. drop table if exists contact;  
  2. create table contact(  
  3.    id int(10) not null auto_increment,  
  4.    firstName varchar(20) ,  
  5.    lastName varchar(20),  
  6.    email varchar(20),  
  7.    primary key(id)   
  8. );  
  9. insert into contact(firstName,lastName,email) values('tang','lj','tang@126.com');  
  10. insert into contact(firstName,lastName,email) values('li','lin','ll@126.com');  
  11. insert into contact(firstName,lastName,email) values('wang','lihong','lh@126.com');  
  12. insert into contact(firstName,lastName,email) values('cen','fen','cf@126.com');  
三、構建相應的JavaBean  Contact.java 
Java代碼   收藏代碼
  1. package com.tonyj.pojo;  
  2.   
  3. public class Contact {  
  4.     private String firstName;  
  5.     private String lastName;  
  6.     private String email;  
  7.     private int id;  
  8.     //相應的getter和setter方法,構造方法  
  9. }  
四、ibatis配置文件詳解  SqlMapConfig.xml文件配置以下: 
Java代碼   收藏代碼
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <!DOCTYPE sqlMapConfig  
  3. PUBLIC "-//ibatis.apache.org//DTD SQL Map Config 2.0//EN"  
  4. "http://ibatis.apache.org/dtd/sql-map-config-2.dtd">  
  5. <sqlMapConfig>  
  6.     <properties resource="jdbc.properties"/>  
  7.     <settings   
  8.         cacheModelsEnabled="true"  
  9.         enhancementEnabled="true"  
  10.         lazyLoadingEnabled="true"  
  11.         maxRequests="32"  
  12.         maxSessions="10"  
  13.         maxTransactions="5"  
  14.         useStatementNamespaces="true"/>   
  15.     <transactionManager type="JDBC">  
  16.         <dataSource type="SIMPLE">  
  17.              <property name="JDBC.Driver" value="${jdbc.driverClassName}"/>  
  18.              <property name="JDBC.ConnectionURL" value="${jdbc.url}"/>  
  19.              <property name="JDBC.Username" value="${jdbc.userName}"/>  
  20.              <property name="JDBC.Password" value="${jdbc.password}"/>  
  21.         </dataSource>  
  22.     </transactionManager>  
  23.     <sqlMap resource="Contact.xml"/>  
  24. </sqlMapConfig>  
一、<properties>元素,SQL Map配置文件擁有惟一的<properties>元素,用於在配置文件中使用標準的Java 屬性文件(name=value)。這樣作後,在屬性文件中定義的屬性能夠做爲變量在SQL Map配置文件激情包含的全部SQL Map映射文件中引用。 
二、<setting>元素  maxRequests:同時執行SQL預計的最大線程數。  maxSessions:同一時間內活動的最大session數。  maxTransactions:同時進入SqlMapClient.startTransaction()的最大線程數。  cacheModelsEnabled:全局性地啓用和禁用SqlMapClient的全部緩存model。  lazyLoadingEnabled:全局性地啓用或禁用SqlMapClient的全部延遲加載。  enhancementEnabled:全局性地啓用或禁用運行時字節碼加強,以優化訪問JavaBean屬性的性能,同時優化延遲加載的性能。  useStatementNamespaces:若是啓用本屬性,必須使用全限定名來引用mapped statement。Mapped statement的全限定名由sql-map的名稱和mapped-statement的名稱合成。 
三、<typeAlias>元素  <typeAlias>元素爲一個一般較長的、全限定類名指定一個較短的別名。  <typeAlias alias="shortname" type="com.long.class.path.Class"/> 
四、<transactionManager>元素  <transactionManager>元素包含三個事物管理器分別是,JDBC,JTA和EXTERNAL  JDBC:經過經常使用的Connection commit()和rollback()方法,讓JDBC管理事務。  JTA:本事務管理器使用一個JTA全局事務,使用SQL Map的事務包括在更大的事務範圍內,這個更大的事務範圍可能包括了其餘的數據庫和事務資源。  EXTERNAL:這個配置能夠本身管理事務。 
五、<datasource>元素  <datasource>是<transactionManager>的一部分,爲SQL Map數據源設置了一系列參數。目前SQL Map架構只提供了三個DataSourceFactory,也能夠添加本身的實現。  SimpleDataSourceFactory:DataSource提供了一個基本的實現,適用於J2EE容器提供DataSource的狀況。  DbcpDataSourceFactory:實現使用Jakarta DBCP(Database Connection Pool)的DataSource API提供鏈接池服務。適用於應用/Web容器不提供DataSource服務的狀況,或執行一單獨的應用。  JndiDataSourceFactory:在應用容器內部從JNDI Context中查找DataSource實現。當使用應用服務器,而且服務器提供了容器管理的鏈接池和相關DataSource實現的狀況下,可使用JndiDataSourceFactory。 
六、<sqlMap>元素  <sqlMap>元素用於包括SQL Map映射文件和其餘的SQL Map配置文件。每一個SqlMapClient對象使用的全部SQL Map映射文件都要在此聲明。映射文件做爲stream resource從類路徑或URL讀入。 
jdbc.properties配置文件 
Java代碼   收藏代碼
  1. jdbc.driverClassName=com.mysql.jdbc.Driver  
  2. jdbc.url=jdbc:mysql://localhost:3306/vin  
  3. jdbc.userName=root  
  4. jdbc.password=sa  
Contact.xml文件 
Java代碼   收藏代碼
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <!DOCTYPE sqlMap  
  3. PUBLIC "-//ibatis.apache.org//DTD SQL MAP 2.0//EN"  
  4. "http://ibatis.apache.org/dtd/sql-map-2.dtd">  
  5. <sqlMap>  
  6.     <typeAlias alias="Contact" type="com.tonyj.pojo.Contact"/>  
  7.     <!-- ibatis查詢操做 -->  
  8.     <select id="getAll" resultClass="Contact">  
  9.         select *   
  10.         from contact  
  11.     </select>  
  12.     <!-- ibatis插入1 -->  
  13.     <insert id="insert" parameterClass="Contact">  
  14.         insert into contact(firstName,lastName,email)  
  15.         values(#firstName#,#lastName#,#email#)  
  16.         <selectKey resultClass="int" keyProperty="id">  
  17.             select last_insert_id() as id  
  18.         </selectKey>  
  19.     </insert>  
  20.     <!-- ibatis插入操做2 -->  
  21.     <parameterMap class="Contact" id="insert-contact-parameter">  
  22.         <parameter property="lastName"/>  
  23.         <parameter property="firstName"/>  
  24.         <parameter property="email"/>  
  25.     </parameterMap>  
  26.     <statement id="insertContact" parameterMap="insert-contact-parameter">  
  27.         insert into contact(lastName,firstName,email) values (?,?,?);  
  28.     </statement>  
  29.     <!-- ibatis刪除操做 -->  
  30.     <delete id="deleteContactById" parameterClass="int">  
  31.         delete from Contact where id=#id#  
  32.     </delete>  
  33.     <!-- ibatis更新操做 -->  
  34.     <update id="updateById" parameterClass="int">  
  35.         update Contact set lastName="tonyJ"  
  36.         where id=#id#  
  37.     </update>  
  38.     <!-- ibatis根據id查詢 -->  
  39.     <resultMap class="Contact" id="result">  
  40.         <result property="id" column="id"/>  
  41.         <result property="firstName" column="firstName"/>  
  42.         <result property="lastName" column="lastName"/>  
  43.         <result property="email" column="email"/>  
  44.     </resultMap>  
  45.     <select id="getById" resultMap="result">  
  46.         select * from contact where id=#id#  
  47.     </select>  
  48.     <!-- ibatis調用mysql存儲過程 -->  
  49.     <procedure id="storedInfo" resultClass="Contact">  
  50.         {call showData()}  
  51.     </procedure>  
  52.     <!-- ibatis模糊查詢 -->  
  53.     <select id="selectByName" parameterClass="String" resultClass="Contact">  
  54.         select *   
  55.         from contact  
  56.         where firstName like '%$firstName$%'  
  57.     </select>  
  58.     <!-- ibatis分頁查詢1 -->  
  59.     <select id="getByPage" parameterClass="java.util.Map" resultClass="Contact">  
  60.         select * from contact   
  61.         <isParameterPresent>  
  62.             <isNotNull property="orderById">  
  63.                 order by $orderById$  
  64.             </isNotNull>  
  65.             <isNotNull property="limitClauseStart">  
  66.                 limit $limitClauseStart$,$limitClauseCount$  
  67.             </isNotNull>  
  68.         </isParameterPresent>  
  69.     </select>  
  70.     <!--ibatis 分頁查詢2 -->  
  71.     <select id="getByPage1" parameterClass="java.util.Map" resultClass="Contact">  
  72.         select *   
  73.         from contact  
  74.     </select>  
  75. </sqlMap>  
五、測試類以下:  IbatisExample.java以下: 
Java代碼   收藏代碼
  1. package com.tonyj.test;  
  2.   
  3. import java.io.Reader;  
  4.   
  5. import com.ibatis.common.resources.Resources;  
  6. import com.ibatis.sqlmap.client.SqlMapClient;  
  7. import com.ibatis.sqlmap.client.SqlMapClientBuilder;  
  8. import com.tonyj.pojo.Contact;  
  9.   
  10. public class IbatisExample {  
  11.     public static void main(String[] args) throws Exception{  
  12.         Reader reader=Resources.getResourceAsReader("SqlMapConfig.xml");  
  13.         SqlMapClient sqlMap=SqlMapClientBuilder.buildSqlMapClient(reader);  
  14.         //查詢  
  15. //      System.out.println("All Contacts");  
  16. //      List<Contact> contacts=(List<Contact>)sqlMap.queryForList("getAll",null);  
  17. //      for(Contact c:contacts){  
  18. //          System.out.println(" "+c.getId()+"-->"+c.getFirstName()+"-->"  
  19. //          +c.getLastName()+"-->"+c.getEmail());  
  20. //      }  
  21.           
  22.         //插入1  
  23. //      System.out.println("*------insert Contact Table------------*");  
  24. //      Contact contact=new Contact("Amit","Kumar","amit@yes.com");  
  25. //      sqlMap.insert("insert",contact);  
  26.         //插入2  
  27.         System.out.println("*------insert Contact Table------------*");  
  28.         Contact contact=new Contact("firstName","lastName","tang@yes.com");  
  29.         sqlMap.insert("insertContact",contact);  
  30.         //刪除  
  31. //      int i=sqlMap.delete("deleteContactById", 1);  
  32. //      System.out.println("i="+i);  
  33.           
  34.         //更新  
  35. //      sqlMap.update("updateById", 3);  
  36.           
  37.         //根據id查詢  
  38. //      Contact contact=(Contact) sqlMap.queryForObject("getById", new Integer(3));  
  39. //      System.out.println(contact.toString());  
  40.           
  41.         //調用存儲過程  
  42. //      List<Contact> contacts=(List<Contact>)sqlMap.queryForList("storedInfo", null);  
  43. //      Contact contact=null;  
  44. //      for(Contact c:contacts){  
  45. //          System.out.println(c.toString());  
  46. //      }  
  47.           
  48.         //模糊查詢  
  49. //      List<Contact> contacts=(List<Contact>)sqlMap.queryForList("selectByName","t");  
  50. //      Contact contact=null;  
  51. //      for(Contact c:contacts){  
  52. //          System.out.println(c.toString());  
  53. //      }  
  54.         //分頁1  
  55. //      Map<String,Object> map=new HashMap<String,Object>();  
  56. //      map.put("orederById"," id asc");  
  57. //      map.put("limitClauseStart",5);  
  58. //      map.put("limitClauseCount",5);  
  59. //      List<Contact> result=(List<Contact>)sqlMap.queryForList("getByPage", map);  
  60. //      for(Contact c:result){  
  61. //          System.out.println(c.toString());  
  62. //      }  
  63.           
  64.         //分頁2  
  65. //      int skip=5;  
  66. //      int max=4;  
  67. //      String sql="getByPage1";  
  68. //      @SuppressWarnings("unchecked")  
  69. //      List<Contact> contacts=(List<Contact>)sqlMap.queryForList(sql,skip,max);  
  70. //      for(Contact c:contacts){  
  71. //          System.out.println(c.toString());  
  72. //      }  
  73.     }  
  74. }  
對應Contact.xml文件,註釋的指導,能夠將註釋除掉一個一個實現該功能。  在上面示例中調用存儲過程的sql以下,先在mysql數據庫中執行以下sql: 
Java代碼   收藏代碼
  1. --更改命令結束符(由於在procedure中常常要用到默認的命令結束符--分號(;)  
  2. --因此在建立procedure的時候須要定義新的結束符以說明建立procedure的命令結束)  
  3. --這裏將結束符號改爲美圓符號--$  
  4. delimiter $  
  5. create procedure vin.showData()  
  6. begin  
  7. select * from Contact;  
  8. end  
  9. $  
相關文章
相關標籤/搜索