SpringMVC中配置mybatis支持多個數據庫

        在mybatis3.1.0之後就內在的支持multi-db了,可以在select/update/delete/insert加上databaseId的方式來標識不同的數據庫,也可以直接使用屬性<if test="_databaseId == 'MySQL'">來判斷不同的數據庫。那如何在spring中集成mybatis使其支持multi-db的特性呢?在mybatis的官方文檔中並沒有具體說明,後來通過查看源碼而得到的配置。下面的vendorProperties中key的值是通過數據庫產品的名稱來的:

private String getDatabaseProductName(DataSource dataSource) throws SQLException { 
   Connection con = null; 
   try { 
      con = dataSource.getConnection(); 
      DatabaseMetaData metaData = con.getMetaData(); 
      return metaData.getDatabaseProductName(); 
   } finally { 
   if (con != null) { 
     try { 
       con.close(); 
     } catch (SQLException e) { 
       // ignored 
     } 
    } 
  } 
} 

主要的spring中的配置項如下:

<?xml version="1.0" encoding="UTF-8"?> 
<beans xmlns="http://www.springframework.org/schema/beans" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> 
<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> 
<property name="locations" value="classpath:datasource.properties"/> 
</bean> 

<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> 
<property name="driverClassName" value="${jdbc.driverClassName}" /> 
<property name="url" value="${jdbc.url}" /> 
<property name="username" value="${jdbc.usename}" /> 
<property name="password" value="${jdbc.password}" /> 
</bean> 

<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> 
<property name="dataSource" ref="dataSource" /> 
</bean> 

<bean id="vendorProperties" class="org.springframework.beans.factory.config.PropertiesFactoryBean"> 
<property name="properties"> 
<props> 
<prop key="SQL Server">sqlserver</prop> 
<prop key="DB2">db2</prop> 
<prop key="Oracle">oracle</prop> 
<prop key="MySQL">mysql</prop> 
</props> 
</property> 
</bean> 

<bean id="databaseIdProvider" class="org.apache.ibatis.mapping.VendorDatabaseIdProvider"> 
<property name="properties" ref="vendorProperties"/> 
</bean> 

<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> 
<property name="mapperLocations" value="classpath*:DYCloudTaskMapper.xml" /> 
<property name="dataSource" ref="dataSource" /> 
<property name="databaseIdProvider" ref="databaseIdProvider"/> 
</bean> 


<bean id="DYCloudTaskMapper" class="org.mybatis.spring.mapper.MapperFactoryBean"> 
<property name="mapperInterface" value="DYCloudTaskMapper" /> 
<property name="sqlSessionFactory" ref="sqlSessionFactory" /> 
</bean> 

</beans>

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章