日期:2014-05-20  浏览次数:20787 次

分享:让iBatisNet同时使用多个数据库
最近作项目,需要使用iBatisNet框架,但是数据库需要同时使用Oracle和Access,在网上查了很多文章都没有相关介绍。经过有一天的摸索(分析源码,测试),终于明白了。
首先,修改dao.config文件,下面是例子:
<?xml version="1.0" encoding="utf-8"?>
<daoConfig xmlns="http://ibatis.apache.org/dataAccess" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<providers resource="providers.config"/>
<context id="SqlMapDao" default="true">
<!-- ==== Sql Server : SqlClient configuration ========= -->
<database>
<provider name="oracleClient1.0" />
<dataSource name="Oracle" connectionString="User ID=gis;Password=gis;Data Source=gis;" />
</database>
<daoSessionHandler id="SqlMap">
<property name="resource" value="SqlMap.config" />
</daoSessionHandler>
<daoFactory>
<dao interface="XXBLL.Persistence.Interfaces.IQListItemDao, XXBLL" 
implementation="XXBLL.Persistence.MapperDao.QListItemSqlMapDao, XXBLL" />
  <dao interface="XXBLL.Persistence.Interfaces.IRoomInfoDao, XXBLL"
implementation="XXBLL.Persistence.MapperDao.RoomInfoSqlMapDao, XXBLL" />
</daoFactory>
</context>
  <context id="AccessMapDao" default="false">
  <!-- ==== Access : OleDb configuration 
  必须设置 providers.config 中 的 OleDb2.0 enable="true"
  ========= -->
  <database>
  <provider name="OleDb2.0" />
  <dataSource name="Access" connectionString="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=E:\test\XXQuery\App_Data\Test.mdb;" />
  </database>
  <!--
  daoSessionHandler 默认 id=SqlMap
  如果要指定不同的DataAccessHandlers,那么需要定义 daoSessionHandlers 配置节。
  -->
  <daoSessionHandler id="SqlMap">
  <property name="resource" value="SqlMap.config" />
  <!-- <property name="resource" value="SqlMap.config" /> -->
  </daoSessionHandler>
  <daoFactory>
  <dao interface="XXBLL.Persistence.Interfaces.IOAClassDao, XXBLL"
implementation="XXBLL.Persistence.MapperDao.OAClassAccessDao, XXBLL" />
  </daoFactory>
   
  </context>
  <!--
  <daoSessionHandlers id="SqlMap1">
  <handler id="SqlMap1" implementation="IBatisNet.DataAccess.DaoSessionHandlers.SqlMapDaoSessionHandler, SqlMapDaoSessionHandler" default="false">
  </handler>
  </daoSessionHandlers>
  -->
</daoConfig>

然后,在一个Service文件中(调用Dao的地方),如下写代码:
//使用不同的doa.config context;
  IDaoManager daoManager = ServiceConfig.GetInstance().GetDaoManager("AccessMapDao");
  IOAClassDao oaClassDao = daoManager.GetDao(typeof(IOAClassDao)) as IOAClassDao;
  return oaClassDao.GetOAClassList();

因为已经在doa.config 文件中默认指定的是Oracle数据库,所以我们这里需要指定dao.config文件中的AccessMapDao 的context配置属性。

OK,到此我们就已经成功地配置好了iBATISNet同时支持多个数据库的功能。



------解决方案--------------------
mark 一下.
------解决方案--------------------
有人关注
------解决方案--------------------
http://www.cnblogs.com/mail-ricklee/archive/2008/07/29/1255873.html

可以参考里面的方式,想ibatisnet跨数据库查询都应该没有问题.