让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同时支持多个数据库的功能。

你可能感兴趣的:(DAO,oracle,数据库,database,Access,interface)