通过自定义注解区分数据源

时间:2019-08-25 18:00:48   收藏:0   阅读:70

有这样一种情况,只有一个持久层的mybatis包,包里的mapper接口所需要的数据源不同,这样就需要为不同的mapper接口注入不同的数据源。可以通过自定义注解区分。

此问题来源于公司项目采用的Oracle数据库,二期项目数据表在TPME用户下,会用到部分一期TPM用户下的部分数据表,而来自一期表的mapper接口和配置文件也放在了二期的mybatis包下。

下面通过MySQL数据库做一个演示。

数据库如下:

MySQL下有ssm和test数据库,ssm库里有book表,test库里有uesr表

技术图片     技术图片

 

mybaits包结构图:

其中BookMapper的数据源为ssm库中的book表,UserMapper的数据源为test库的user表

技术图片

 

 为了能够区分这两个Mapper的数据源,咱们需要扫描指定包。可以通过自定义注解扫描指定包。

自定义两个注解如下:

技术图片  技术图片

mapper接口和配置文件如下:

技术图片

技术图片

技术图片技术图片

mysql.properties配置文件如下:

技术图片

 

applicationContext-dao配置文件如下:

 其中mapper扫描的时候需要指定自定义注解

 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        xmlns:context="http://www.springframework.org/schema/context"
 5        xsi:schemaLocation="http://www.springframework.org/schema/beans
 6        http://www.springframework.org/schema/beans/spring-beans.xsd
 7         http://www.springframework.org/schema/context
 8         http://www.springframework.org/schema/context/spring-context-4.0.xsd">
 9     <!-- 引入数据源配置文件 -->
10     <context:property-placeholder location="classpath:mysql.properties" />
11     <!-- 配置数据源 -->
12     <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
13         <property name="driverClass" value="${jdbc.driver}" />
14         <property name="jdbcUrl" value="${jdbc.url}" />
15         <property name="user" value="${jdbc.username}" />
16         <property name="password" value="${jdbc.password}" />
17     </bean>
18 
19     <bean id="dataSource-test" class="com.mchange.v2.c3p0.ComboPooledDataSource">
20         <property name="driverClass" value="${test.jdbc.driver}" />
21         <property name="jdbcUrl" value="${test.jdbc.url}" />
22         <property name="user" value="${test.jdbc.username}" />
23         <property name="password" value="${test.jdbc.password}" />
24     </bean>
25 
26     <!-- 配置mybatis会话工厂 -->
27     <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
28         <property name="dataSource" ref="dataSource" />
29     </bean>
30 
31     <!-- 配置mybatis会话工厂 -->
32     <bean id="sqlSessionFactory-test" class="org.mybatis.spring.SqlSessionFactoryBean">
33         <property name="dataSource" ref="dataSource-test" />
34     </bean>
35 
36     <!-- 配置包扫描 -->
37     <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
38         <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory" />
39         <property name="basePackage" value="com.alphajuns.ssm.mybatis" />
40         <property name="annotationClass" value="com.alphajuns.ssm.utils.BookRepository" />
41     </bean>
42 
43     <!-- 配置包扫描 -->
44     <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
45         <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory-test" />
46         <property name="basePackage" value="com.alphajuns.ssm.mybatis" />
47         <property name="annotationClass" value="com.alphajuns.ssm.utils.UserRepository" />
48     </bean>
49 </beans>

 对其进行测试,测试结果如下:

技术图片   技术图片

如果不采用注解区分,而只为mapper扫描包指定数据源,以上面的为例,只需要将来自同一数据库的表放在同一包下。

 

评论(0
© 2014 mamicode.com 版权所有 京ICP备13008772号-2  联系我们:gaon5@hotmail.com
迷上了代码!