如何在spring中配置使得mybatis3.1.1中支持vendor方式的multi-db(多数据库)

 

问题起源:

同一个项目适应多种数据库,基本上是企业应用的常见需求。以往在mybatis中的支持是通过扩展dao而来实现的,参考:

http://code.google.com/p/mybatis/issues/detail?id=21.

问题解决:

而在mybatis3.1.0之后就内在的支持multi-db了,可以在select/update/delete/insert加上databaseId的方式来标识不同的数据库,也可以直接使用属性<if test="_databaseId == 'MySQL'">来判断不同的数据库。那如何在spring中集成mybatis使其支持multi-db的特性呢?在mybatis的官方文档中并没有具体说明,后来通过查看源码而得到的配置。

  下面的vendorProperties中key的值是通过数据库产品的名称来的:

Java代码 

 收藏代码

  1. private String getDatabaseProductName(DataSource dataSource) throws SQLException {  
  2.     Connection con = null;  
  3.     try {  
  4.       con = dataSource.getConnection();  
  5.       DatabaseMetaData metaData = con.getMetaData();  
  6.       return metaData.getDatabaseProductName();  
  7.     } finally {  
  8.       if (con != null) {  
  9.         try {  
  10.           con.close();  
  11.         } catch (SQLException e) {  
  12.           // ignored  
  13.         }  
  14.       }  
  15.     }  
  16.   }  

 

 得到主要的spring中的配置项如下:

Java代码 

 收藏代码

  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <beans xmlns="http://www.springframework.org/schema/beans"  
  3.        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  4.        xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">  
  5.     <bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">  
  6.         <property name="locations" value="classpath:datasource.properties"/>  
  7.     </bean>  
  8.   
  9.     <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">  
  10.         <property name="driverClassName" value="${jdbc.driverClassName}" />  
  11.         <property name="url" value="${jdbc.url}" />  
  12.         <property name="username" value="${jdbc.usename}" />  
  13.         <property name="password" value="${jdbc.password}" />  
  14.     </bean>  
  15.   
  16.     <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">  
  17.         <property name="dataSource" ref="dataSource" />  
  18.     </bean>  
  19.   
  20.     <bean id="vendorProperties" class="org.springframework.beans.factory.config.PropertiesFactoryBean">  
  21.         <property name="properties">  
  22.             <props>  
  23.                 <prop key="SQL Server">sqlserver</prop>  
  24.                 <prop key="DB2">db2</prop>  
  25.                 <prop key="Oracle">oracle</prop>  
  26.                 <prop key="MySQL">mysql</prop>  
  27.             </props>  
  28.         </property>  
  29.     </bean>  
  30.   
  31.     <bean id="databaseIdProvider" class="org.apache.ibatis.mapping.VendorDatabaseIdProvider">  
  32.          <property name="properties" ref="vendorProperties"/>  
  33.     </bean>  
  34.   
  35.     <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">  
  36.        <property name="mapperLocations" value="classpath*:DYCloudTaskMapper.xml" />  
  37.        <property name="dataSource" ref="dataSource" />  
  38.        <property name="databaseIdProvider" ref="databaseIdProvider"/>  
  39.     </bean>  
  40.   
  41.   
  42.     <bean id="DYCloudTaskMapper" class="org.mybatis.spring.mapper.MapperFactoryBean">  
  43.         <property name="mapperInterface" value="DYCloudTaskMapper" />  
  44.         <property name="sqlSessionFactory" ref="sqlSessionFactory" />  
  45.     </bean>  
  46.   
  47. </beans>  

转载于:https://my.oschina.net/heguojun/blog/1573909

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值