分享

向架构的阶梯攀爬: ibatis 多数据源(一)

 WindySky 2009-03-29
在程序中需要连接多个数据源

解决方案有几个

使用ibatis自带的Dao Framework来构件

一个dao.xml对应多个sql-map-config.xml,但是对应一个数据源

sql-map-config1.xml:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE sqlMapConfig PUBLIC "-//ibatis.//DTD SQL Map Config 2.0//EN"
    "http://ibatis./dtd/sql-map-config-2.dtd">

<sqlMapConfig>
 
<properties resource="properties/database.properties" />
 
<transactionManager type="JDBC">
 
<dataSource type="SIMPLE">
   
<property value="${driver1}" name="JDBC.Driver" />
   
<property value="${url1}" name="JDBC.ConnectionURL" />
   
<property value="${username1}" name="JDBC.Username" />
   
<property value="${password1}" name="JDBC.Password" />
 
</dataSource>
 
</transactionManager>
 
<sqlMap resource="com/ibatis/nicholas/persistence/sqlmap/User.xml" />
</sqlMapConfig>

sql-map-config2.xml:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE sqlMapConfig PUBLIC "-//ibatis.//DTD SQL Map Config 2.0//EN"
    "http://ibatis./dtd/sql-map-config-2.dtd">

<sqlMapConfig>
 
<properties resource="properties/database.properties" />
 
<transactionManager type="JDBC">
 
<dataSource type="SIMPLE">
   
<property value="${driver2}" name="JDBC.Driver" />
   
<property value="${url2}" name="JDBC.ConnectionURL" />
   
<property value="${username2}" name="JDBC.Username" />
   
<property value="${password2}" name="JDBC.Password" />
 
</dataSource>
 
</transactionManager>
 
<sqlMap resource="com/ibatis/nicholas/persistence/sqlmap/User.xml" />
</sqlMapConfig>


dao1.xml:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE daoConfig
    PUBLIC "-//ibatis.//DTD DAO Configuration 2.0//EN"
    "http://ibatis./dtd/dao-2.dtd">

<daoConfig>
 
<context>
 
<transactionManager type="SQLMAP">
   
<property name="SqlMapConfigResource"
   
value="com/ibatis/nicholas/persistence/sqlmap/sql-map-config1.xml" />
 
</transactionManager>
 
<dao interface="com.ibatis.nicholas.persistence.dao.UserDao"
   
implementation="com.ibatis.nicholas.persistence.daoimpl.UserDaoImpl" />
 
</context>
</daoConfig>

dao2.xml:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE daoConfig
    PUBLIC "-//ibatis.//DTD DAO Configuration 2.0//EN"
    "http://ibatis./dtd/dao-2.dtd">

<daoConfig>
 
<context>
 
<transactionManager type="SQLMAP">
   
<property name="SqlMapConfigResource"
   
value="com/ibatis/nicholas/persistence/sqlmap/sql-map-config2.xml" />
 
</transactionManager>
 
<dao interface="com.ibatis.nicholas.persistence.dao.UserDao"
   
implementation="com.ibatis.nicholas.persistence.daoimpl.UserDaoImpl" />
 
</context>
</daoConfig>

DaoConfig.java:

import com.ibatis.common.resources.Resources;
import com.ibatis.dao.client.DaoManager;
import com.ibatis.dao.client.DaoManagerBuilder;
import java.io.Reader;
import java.util.Properties;
public class DaoConfig {
 
private static final String resource1 = "com/ibatis/nicholas/persistence/dao1.xml";
 
private static final String resource2 = "com/ibatis/nicholas/persistence/dao1.xml";
 
private static final DaoManager daoManager1;
 
private static final DaoManager daoManager2;
 
static {
 
try {
   daoManager1
= newDaoManager1(null);
   daoManager2
= newDaoManager2(null);
   
Properties props = Resources
     
.getResourceAsProperties("properties/database.properties");
 
} catch (Exception e) {
   
throw new RuntimeException("Description.  Cause: " + e, e);
 
}
 
}
 
public static DaoManager getDaoManager1() {
 
return daoManager1;
 
}
 
public static DaoManager getDaoManager2() {
 
return daoManager2;
 
}
 
public static DaoManager newDaoManager1(Properties props) {
 
try {
   
Reader reader = Resources.getResourceAsReader(resource1);
   
return DaoManagerBuilder.buildDaoManager(reader, props);
 
} catch (Exception e) {
   
throw new RuntimeException(
     
"Could not initialize DaoConfig.  Cause: " + e, e);
 
}
 
}
 
public static DaoManager newDaoManager2(Properties props) {
 
try {
   
Reader reader = Resources.getResourceAsReader(resource2);
   
return DaoManagerBuilder.buildDaoManager(reader, props);
 
} catch (Exception e) {
   
throw new RuntimeException(
     
"Could not initialize DaoConfig.  Cause: " + e, e);
 
}
 
}
}

然后在你的service中通过DaoConfig.java来取到相对应的daoManager...
实现多数据源

不过ibatis已经停止对DaoFramework的更新,并且建议我们使用spring的daoframework,所以下一篇将是将ibatis和spring的结合。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多