碰到了一個需求因爲項目須要鏈接有多個數據庫,因此稍微研究了下ibatis實現鏈接不一樣數據庫,而且不干擾的技術。 spring
第一步 sql
項目裏一般都有jdbc.properties。裏面配置兩個數據源配置。 數據庫
jdbc.driverClassName=oracle.jdbc.driver.OracleDriver
jdbc.url=jdbc:oracle:thin:@127.0.0.1 :1521:orcl
jdbc.username=xxxx
jdbc.password=xxxx apache
h2.driverClassName=org.h2.Driver
h2.url=jdbc:h2:database/h2db
h2.username=xxxx
h2.password=xxxx oracle
第二步, app
在spring中的applicationContext.xml中配置兩個數據庫鏈接源。 url
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> <property name="driverClassName" value="${jdbc.driverClassName}"/> <property name="url" value="${jdbc.url}"/> <property name="username" value="${jdbc.username}"/> <property name="password" value="${jdbc.password}"/> </bean>
<bean id="dataSourceH2" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> <property name="driverClassName" value="${h2.driverClassName}"/> <property name="url" value="${h2.url}"/> <property name="username" value="${h2.username}"/> <property name="password" value="${h2.password}"/> </bean>
而後設置對應的關聯關係。 spa
先設置ORACLE的映射關係SqlMapConfig.xml .net
<bean id="sqlMapClient" class="org.springframework.orm.ibatis.SqlMapClientFactoryBean"> <property name="configLocation" value="classpath:SqlMapConfig.xml"/> <property name="dataSource" ref="dataSource"/> </bean>
再設置H2數據庫的映射關係SqlMapConfigByH2.xml code
<bean id="sqlMapClientByH2" class="org.springframework.orm.ibatis.SqlMapClientFactoryBean"> <property name="configLocation" value="classpath:SqlMapConfigByH2.xml"/> <property name="dataSource" ref="dataSourceH2"/> </bean>事物管理中配置
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="dataSource"/> <property name="dataSourceH2" ref="dataSourceH2"/> </bean>
第三步、因爲已經配置好了不一樣數據源對應xml因此就能夠在SqlMapConfig.xml配置oralce的sql語句,而在SqlMapConfigByH2.xml配置H2的SQL語句。
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE sqlMapConfig PUBLIC "-//ibatis.apache.org//DTD SQL Map Config 2.0//EN" "http://ibatis.apache.org/dtd/sql-map-config-2.dtd"> <sqlMapConfig> <settings cacheModelsEnabled="true" enhancementEnabled="true" lazyLoadingEnabled="true" maxRequests="20" maxSessions="10" maxTransactions="50" useStatementNamespaces="false" /> <sqlMap resource="com/efunds/tydw/sys/po/users.xml"/> </sqlMapConfig>
而後在users.xml中就能夠填寫對應的SQL語句了。
我以爲我這種方式耦合度最低,比網上查到的方法要好,因此貼出來做爲筆記