第一步:建立POJO類
Java代碼
package com.ibatis;import java.io.Serializable;public class Ibatis implements Serializable{private static final long serialVersionUID = 4054639727225043549L;private int id;private String name;private int age;public Ibatis() {super();}public Ibatis(int id, String name, int age) {super();this.id = id;this.name = name;this.age = age;}public int getId() {return id;}public void setId(int id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public String toString(){return id + " " + name + " " + age;}}
第二步:建立上述POJO類的IBatis設定檔
Xml代碼
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE sqlMapPUBLIC "-//iBATIS.com//DTD SQL Map 2.0//EN""http://www.ibatis.com/dtd/sql-map-2.dtd"><sqlMap namespace="Ibatis"><typeAlias alias="ibatis" type="com.ibatis.Ibatis"/><select id="getIbatis" parameterClass="java.lang.String"resultClass="ibatis">select id, name, age from ibatis where name = #name#</select><update id="updateIbatis" parameterClass="ibatis">UPDATE ibatis SET name=#name#, age=#age# WHERE id = #id#</update><insert id="insertIbatis" parameterClass="ibatis">INSERT INTO ibatis (id, name,age) VALUES (#id#, #name#, #age#)</insert><delete id="deleteIbatis" parameterClass="java.lang.String">delete from ibatis where id = #value#</delete></sqlMap>
第三步:建立IBatis ORM架構的總設定檔SqlMapConfig.xml
Xml代碼
<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE sqlMapConfigPUBLIC "-//iBATIS.com//DTD SQL Map Config 2.0//EN""http://www.ibatis.com/dtd/sql-map-config-2.dtd"><sqlMapConfig><!-- 1. cacheModelsEnabled 是否啟動sqlMapClient上的緩衝機制;2. enhancementEnabled是否針對POJO啟用位元組碼增強機制以提升getter/setter的調用效能,避免使用Java Reflect所帶來的效能開銷,同時也為Lazy Loading帶來了極大的效能提升;3. errorTracingEnabled 是否啟用錯誤記錄檔;在開發期間建議設為“true”以方便調試4. lazyLoadingEnabled 是否啟動延遲載入機制5. maxRequests 最大並發請求數(Statement並發數)5. maxTransactions 最大並發事務6. maxSessions 最大Session數,即當前最大允許的並發sqlMapClient數(介於maxRequests和maxTransactions之間)7. useStatementNamespaces 是否使用Statement命名空間(為true時,需要追加命名空間) --><settings cacheModelsEnabled="true" enhancementEnabled="true"lazyLoadingEnabled="true" errorTracingEnabled="true" maxRequests="32"maxSessions="10" maxTransactions="5" useStatementNamespaces="false" /><!-- transactionManager 節點定義了ibatis的交易管理員1. JDBC:通過傳統JDBC Connection.commit/rollback實現事務支援2. JTA:使用容器提供的JTA服務實現全域交易管理3. EXTERNAL:外部交易管理,如EJB中使用ibatis,通過EJB的部署配置即可實現自動交易管理機制此時ibatis將所有事務委託給外部容器管理 --><transactionManager type="JDBC"><!-- dataSource從屬於transactionManager節點,用於設定ibatis運行期使用的DataSource屬性type屬性: dataSource節點的type屬性指定了dataSource的實作類別型1. SIMPLE:SIMPLE是ibatis內建的dataSource實現,其中實現了一個簡單的資料庫連接池機制, 對應ibatis 實作類別為com.ibatis.sqlmap.engine.datasource.SimpleDataSourceFactory。2. DBCP:基於Apache DBCP串連池組件實現的DataSource 封裝,當無容器提供DataSource 服務時,建議使用該選項,對應ibatis 實作類別為com.ibatis.sqlmap.engine.datasource.DbcpDataSourceFactory。3. JNDI:使用J2EE 容器提供的DataSource 實現,DataSource 將通過指定的JNDI Name 從容器中擷取。對應ibatis 實作類別為com.ibatis.sqlmap.engine.datasource.JndiDataSourceFactory。 --><dataSource type="SIMPLE"><!-- JDBC驅動 --><property name="JDBC.Driver" value="oracle.jdbc.driver.OracleDriver" /><!-- 資料庫URL --><property name="JDBC.ConnectionURL" value="jdbc:oracle:thin:@192.168.241.27:1521:orcl" /><!-- 資料庫使用者名稱 --><property name="JDBC.Username" value="aaa" /><!-- 資料庫密碼 --><property name="JDBC.Password" value="aaa" /><property name="Pool.MaximumActiveConnections" value="10" /><property name="Pool.MaximumIdleConnections" value="5" /><property name="Pool.MaximumCheckoutTime" value="120000" /><property name="Pool.TimeToWait" value="500" /><property name="Pool.PingQuery" value="select 1 from ACCOUNT" /><property name="Pool.PingEnabled" value="false" /><property name="Pool.PingConnectionsOlderThan" value="1" /><property name="Pool.PingConnectionsNotUsedFor" value="1" /></dataSource></transactionManager><!-- 指定對應檔的位置,配置中可出現多個sqlMap節點,以指定項目內所有對應檔 --><sqlMap resource="com/ibatis/Ibatis.xml" /></sqlMapConfig>
第四步:建立一個測試類別,檢驗上述配置 + 類檔案
Java代碼
package com.ibatis; import java.io.Reader; import org.apache.log4j.Logger; import com.ibatis.common.resources.Resources; import com.ibatis.sqlmap.client.SqlMapClient; import com.ibatis.sqlmap.client.SqlMapClientBuilder; public class TestMain { static Logger logger = Logger.getLogger(TestMain.class.getName()); /** * @param args */ public static void main(String[] args) { String resource ="SqlMapConfig.xml"; //sqlMap系統初始化完畢,開始執行update操作 try { Reader reader = Resources.getResourceAsReader(resource); SqlMapClient sqlMap = SqlMapClientBuilder.buildSqlMapClient(reader); sqlMap.startTransaction(); // Ibatis ibatis = new Ibatis(); // ibatis.setId(new Integer(1)); // ibatis.setName("Erica"); // ibatis.setAge(new Integer(1)); // sqlMap.insert("insertIbatis",ibatis); Ibatis ibatis = (Ibatis)sqlMap.queryForObject("getIbatis", "Erica"); System.out.println(ibatis.toString()); sqlMap.commitTransaction(); } catch (Exception e) { // TODO: handle exception logger.debug(e.toString()); } } }