1. SqlMapConfig.xml 在src目錄下
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE sqlMapConfig
PUBLIC "-//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" />
-->
<property name="JDBC.Driver" value="com.mysql.jdbc.Driver" />
<!-- 數據庫URL -->
<!--
<property name="JDBC.ConnectionURL" value="jdbc:oracle:thin:@192.168.241.27:1521:orcl" />
-->
<property name="JDBC.ConnectionURL" value="jdbc:mysql://localhost:3306/mytestdb" />
<!-- 數據庫用戶名 -->
<property name="JDBC.Username" value="csz" />
<!-- 數據庫密碼 -->
<property name="JDBC.Password" value="csz" />
<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/FirstIbatis.xml" />
</sqlMapConfig>
2. log4j.xml文件,也在src目錄下
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j='http://jakarta.apache.org/log4j/' >
<appender name="myConsole" class="org.apache.log4j.ConsoleAppender">
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern"
value="[%d{dd HH:mm:ss,SSS\} %-5p] [%t] %c{2\} - %l%m%n" />
</layout>
<!--過濾器設置輸出的級別-->
<filter class="org.apache.log4j.varia.LevelRangeFilter">
<param name="levelMin" value="debug" />
<param name="levelMax" value="warn" />
<param name="AcceptOnMatch" value="true" />
</filter>
</appender>
<appender name="myFile" class="org.apache.log4j.RollingFileAppender">
<param name="File" value="D:/output.log" /><!-- 設置日誌輸出文件名 -->
<!-- 設置是否在重新啓動服務時,在原有日誌的基礎添加新日誌 -->
<param name="Append" value="true" />
<param name="MaxBackupIndex" value="10" />
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%p (%c:%L)- %m%n" />
</layout>
</appender>
<appender name="activexAppender" class="org.apache.log4j.DailyRollingFileAppender">
<param name="File" value="E:/activex.log" />
<param name="DatePattern" value="'.'yyyy-MM-dd'.log'" />
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern"
value="[%d{MMdd HH:mm:ss SSS\} %-5p] [%t] %c{3\} - %m%n" />
</layout>
</appender>
<!-- 指定logger的設置,additivity指示是否遵循缺省的繼承機制-->
<logger name="com.runway.bssp.activeXdemo" additivity="false">
<priority value ="info"/>
<appender-ref ref="activexAppender" />
</logger>
<!-- 根logger的設置-->
<root>
<priority value ="debug"/>
<appender-ref ref="myConsole"/>
<appender-ref ref="myFile"/>
</root>
</log4j:configuration>
3. FirstIbatis.xml映射文件,在src\com\ibatis目錄下
<?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="Ibatis">
<typeAlias alias="ibatis" type="com.ibatis.FirstIbatis"/>
<!-- my own sql start -->
<select id="getIbatis2" resultClass="ibatis">
select * from firstibatis
</select>
<!-- my own sql end -->
<select id="getIbatis" parameterClass="java.lang.String" resultClass="ibatis">
select id, name, age from firstibatis where name = #name#
</select>
<update id="updateIbatis" parameterClass="ibatis">
UPDATE firstibatis SET name=#name#, age=#age# WHERE id = #id#
</update>
<insert id="insertIbatis" parameterClass="ibatis">
INSERT INTO firstibatis (id, name,age) VALUES (#id#, #name#, #age#)
</insert>
<delete id="deleteIbatis" parameterClass="java.lang.String">
delete from firstibatis where id = #value#
</delete>
</sqlMap>
4. FirstIbatis.java, 在src/com/ibatis目錄下
package com.ibatis;
import java.io.Serializable;
public class FirstIbatis implements Serializable{
private static final long serialVersionUID = 4054639727225043549L;
private int id;
private String name;
private int age;
public FirstIbatis() {
super();
}
public FirstIbatis(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;
}
}
5. TestIbatis.java, 在src/com/ibatis目錄下
package com.ibatis;
import java.io.Reader;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Set;
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 TestIbatis {
static Logger logger = Logger.getLogger(TestIbatis.class.getName());
/**
* @param args
*/
public static void main(String[] args) {
String path = System.getProperty("user.dir");
System.out.println(path);
//String resource =path + File.separator + "src" + File.separator + "SqlMapConfig.xml";
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);
//增
//Object[] arr = new Object[]{2, "hello", 23};
// FirstIbatis obj = new FirstIbatis();
// obj.setId(2);
// obj.setName("hello");
// obj.setAge(23);
//FirstIbatis ibatis = (FirstIbatis)sqlMap.insert("insertIbatis", obj);
//刪
// int n = sqlMap.delete("deleteIbatis", "2");
// if(n == 1) {
// System.out.println("The record id of 2 is deleted!");
// }
//改
FirstIbatis obj = new FirstIbatis();
obj.setId(1);
obj.setName("Erica");
obj.setAge(23);
int n = sqlMap.update("updateIbatis",obj);
if(n == 1) {
System.out.println("The record id of 1 is updated!");
}
//查
//FirstIbatis ibatis = (FirstIbatis)sqlMap.queryForObject("getIbatis", "Erica");
//System.out.println("Query for Erica: " + ibatis.toString());
List list = (List)sqlMap.queryForList("getIbatis2");
System.out.println(list.size() + list.toString());
FirstIbatis ibatis = null;
for(int i = 0; i < list.size(); i ++) {
ibatis = (FirstIbatis)list.get(i);
System.out.println("Query firstibatis for List: " + ibatis.toString());
}
sqlMap.commitTransaction();
} catch (Exception e) {
// TODO: handle exception
//e.printStackTrace();
logger.debug(e.toString());
}
}
}
所需jar包:
ibatis-2.3.4.726.jar, log4j-1.2.1.6, mysql-connector-java-5.0.4-bin.jar, proxool-0.9.1.jar
完整實例下載: