1. 程式人生 > >ibatis多個dataSource配置

ibatis多個dataSource配置

⑶ dataSource節點
dataSource從屬於transactionManager節點,用於設定ibatis執行期使用的DataSource屬性。
type屬性: dataSource節點的type屬性指定了dataSource的實現型別。
可選專案:
Ø SIMPLE:
SIMPLE是ibatis內建的dataSource實現,其中實現了一個簡單的資料庫連線池機制, 對應ibatis 實現類為
com.ibatis.sqlmap.engine.datasource.SimpleDataSourceFactory。
Ø DBCP:
基於Apache DBCP 連線池元件實現的DataSource 封裝,當無容器提供DataSource 服務時,建議使用該選項,對應ibatis 實現類為com.ibatis.sqlmap.engine.datasource.DbcpDataSourceFactory。
Ø JNDI:
使用J2EE 容器提供的DataSource 實現,DataSource 將通過指定的JNDI Name 從容器中獲取。對應ibatis 實現類為com.ibatis.sqlmap.engine.datasource.JndiDataSourceFactory。

dataSource的子節點說明(SIMPLE&DBCP):

引數 描述
JDBC.Driver JDBC 驅動。
如:org.gjt.mm.mysql.Driver
JDBC.ConnectionURL 資料庫URL。
如:jdbc:mysql://localhost/sample
如果用的是SQLServer JDBC Driver,需要在url後追加SelectMethod=Cursor以獲得JDBC事務的多statement支援。
JDBC.Username: 資料庫使用者名稱
JDBC.Password: 資料庫使用者密碼
Pool.MaximumActiveConnections:資料庫連線池可維持的最大容量。
Pool.MaximumIdleConnections:資料庫連線池中允許的掛起(idle)連線數。
以上子節點適用於SIMPLE 和DBCP 模式,分別針對SIMPLE 和DBCP 模式的DataSource私有配置節點如下:
SIMPLE:
引數 描述
Pool.MaximumCheckoutTi
me
資料庫聯接池中,連線被某個任務所允許佔用的最大時間,如果超過這個時間限定,連線將被強制收回。(毫秒)
Pool.TimeToWait 當執行緒試圖從連線池中獲取連線時,連線池中無可用連線可供使用,此時執行緒將進入等待狀態,
直到池中出現空閒連線。此引數設定了執行緒所允許等待的最長時間。(毫秒)
Pool.PingQuery 資料庫連線狀態檢測語句。
某些資料庫在連線在某段時間持續處於空閒狀態時會將其斷開。而連線池管理器將通過此語句檢測池中連線是否可用。
檢測語句應該是一個最簡化的無邏輯SQL。
如“select 1 from t_user”,如果執行此語句成功,連線池管理器將認為此連線處於可用狀態。
Pool.PingEnabled 是否允許檢測連線狀態。
Pool.PingConnectionsOlderThan
對持續連線時間超過設定值(毫秒)的連線進行檢測。
Pool.PingConnectionsNotUsedFor 對空閒超過設定值(毫秒)的連線進行檢測。
DBCP:
引數 描述
Pool.MaximumWait 當執行緒試圖從連線池中獲取連線時,連線池中無可用連線可供使用,此時執行緒將進入等待狀態,直到池中出現空閒連線。此引數設定了執行緒所允許等待的最長時間。(毫秒)
Pool.ValidationQuery 資料庫連線狀態檢測語句。某些資料庫在連線在某段時間持續處於空閒狀態
時會將其斷開。而連線池管理器將通過此語句檢測池中連線是否可用。檢測語句應該是一個最簡化的無邏輯SQL。
如“select 1 from t_user”,如果執行此語句成功,連線池管理器將認為此連線處於可用狀態。
Pool.LogAbandoned 當資料庫連線被廢棄時,是否列印日誌。
Pool.RemoveAbandonedTimeout資料庫連線被廢棄的最大超時時間
Pool.RemoveAbandoned 當連線空閒時間超過
RemoveAbandonedTimeout時,是否將其廢棄。
JNDI由於大部分配置是在應用伺服器中進行,因此ibatis中的配置相對簡單,下面是分別使用JDBC和JTA事務管理的JDNI配置:
使用JDBC事務管理的JNDI DataSource配置
<transactionManager type="JDBC" >
<dataSource type="JNDI">
<property name="DataSource"
value="java:comp/env/jdbc/myDataSource"/>
</dataSource>
</transactionManager>
<transactionManager type="JTA" >
<property name="UserTransaction"
value="java:/ctx/con/UserTransaction"/>
<dataSource type="JNDI">
<property name="DataSource"
value="java:comp/env/jdbc/myDataSource"/>
</dataSource>
</transactionManager>
⑷ sqlMap節點
sqlMap 節點指定了對映檔案的位置,配置中可出現多個sqlMap 節點,以指定專案內所包含的所有對映檔案。
5.編寫POJO類:
public class User implements Serializable {
private Integer id;
private String name;
private Integer sex;
private Set addresses = new HashSet();
/** default constructor */
public User() {
}
public Integer getId() {
return this.id;}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return this.name;
}
public void setName(String name) {
this.name = name;
}
public Integer getSex() {
return this.sex;
}
public void setSex(Integer sex) {
this.sex = sex;
}
}
6.編寫對映檔案User.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="User">
<typeAlias alias="user" type="com.ibatis.sample.User"/>
<select id="getUser"
parameterClass="java.lang.String"
resultClass="user">
<![CDATA[
select
name,
sex
from t_userwhere name = #name#
]]>
</select>
<update id="updateUser"
parameterClass="user">
<![CDATA[
UPDATE t_user
SET
name=#name#,
sex=#sex#
WHERE id = #id#
]]>
</update>
<insert id="insertUser"
parameterClass="user"
>
INSERT INTO t_user (
name,
sex)
VALUES (
#name#,
#sex#
)</insert>
<delete id="deleteUser"
parameterClass="java.lang.String">
delete from t_user
where id = #value#
</delete>
</sqlMap>
7.編寫操作類,部分程式碼如下:
String resource ="com/ibatis/sample/SqlMapConfig.xml";
Reader reader;
reader = Resources.getResourceAsReader(resource);XmlSqlMapClientBuilder xmlBuilder =
new XmlSqlMapClientBuilder();
SqlMapClient sqlMap = xmlBuilder.buildSqlMap(reader);
//sqlMap系統初始化完畢,開始執行update操作
try{
sqlMap.startTransaction();
User user = new User();
user.setId(new Integer(1));
user.setName("Erica");
user.setSex(new Integer(1));
sqlMap.update("updateUser",user);
sqlMap.commitTransaction();
finally{
sqlMap.endTransaction();
}