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

有这样一种情况,只有一个持久层的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扫描包指定数据源,以上面的为例,只需要将来自同一数据库的表放在同一包下。

原文地址:https://www.cnblogs.com/alphajuns/p/11408579.html

时间: 2024-10-09 10:28:54

通过自定义注解区分数据源的相关文章

自定义注解

它类似于新创建一个接口文件,但为了区分,我们需要将它声明为@interface,如下例: public @interface NewAnnotation { } 使用自定义的注解类型 public class AnnotationTest { @NewAnnotation public static void main(String[]args) { } } 为自定义注解添加变量 public @interface NewAnnotation { String value(); } public

利用自定义注解在SpringMVC中实现自定义权限检查

先描述一下应用场景,基于Spring MVC的WEB程序,需要对每个Action进行权限判断,当前用户有权限则允许执行Action,无权限要出错提示.权限有很多种,比如用户管理权限.日志审计权限.系统配置权限等等,每种权限还会带参数,比如各个权限还要区分读权限还是写权限. 想实现统一的权限检查,就要对Action进行拦截,一般是通过拦截器来做,可以实现HandlerInterceptor或者HandlerInterceptorAdapter,但是每个Action都有不同的权限检查,比如getUs

hibernate validation内置注解及自定义注解

1 Bean Validation 中内置的 constraint 2 @Null 被注释的元素必须为 null 3 @NotNull 被注释的元素必须不为 null 4 @AssertTrue 被注释的元素必须为 true 5 @AssertFalse 被注释的元素必须为 false 6 @Min(value) 被注释的元素必须是一个数字,其值必须大于等于指定的最小值 7 @Max(value) 被注释的元素必须是一个数字,其值必须小于等于指定的最大值 8 @DecimalMin(value)

springAOP实现基于注解的数据源动态切换

需求 代码实现读写数据库分离 武器 spring3.0以上版本 实现思路 1.继承org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource,自定义数据源路由. 2.实现数据源类型管理工具,诸如DBContextHolder,包含设置和读取当前数据源配置. 3.实现数据源切换的AOP. 4.自定义只读注解,诸如@ReadOnlyKey. 5.配置transactionManager,实现aop. 代码示例 1.自定义的

自定义注解与MYSQL

无聊之作,可以提意见,但别嘲笑啊 package bean; import java.sql.Date; import annotationK.annotation.Column; import annotationK.annotation.Comment; import annotationK.annotation.Entity; import annotationK.annotation.GeneratedValue; import annotationK.annotation.Genera

Java自定义注解

自定义注解类编写的一些规则: 1. Annotation型定义为@interface, 所有的Annotation会自动继承Java.lang.Annotation这一接口,并且不能再去继承别的类或是接口. 2. 参数成员只能用public或默认(default)这两个访问权修饰 3. 参数成员只能用基本类型byte,short,char,int,long,float,double,boolean八种基本数据类型和String.Enum.Class.annotations等数据类型,以及这一些类

【java开发系列】—— 自定义注解(转)

之前在开发中,就总纳闷,为什么继承接口时,会出现@Override注解,有时候还会提示写注解@SuppressWarnings? 原来这是java特有的特性,注解! 那么什么是注解呢? 注解就是某种注解类型的一个实例,我们可以用它在某个类上进行标注,这样编译器在编译我们的文件时,会根据我们自己设定的方法来编译类. 注解都是什么呢?看下面这张图就明白了! 上面的图可以看出,注解大体上分为三种:标记注解,一般注解,元注解 这里面Override这个没测试出来,因为目前的Eclipse会自动帮我们排错

自定义注解框架的那些事

一.前言 距离上次更新已过一个半月,工作太忙也不是停更的理由.我这方面做得很不好,希望大家给予监督.首先会讲解[编译期资源注入],接着是[下拉刷新注入](通过注解来实现下拉刷新功能),最后打造一款[特色的注解框架]. 大家准备好公交卡了吗,开车了 - 二.什么是注解 每位童鞋对 注解 都有自己的理解,字面上的意思就是[额外的加入],在项目当中使用的注解的框架已经越来越多,如 : retrofit ,butterknife,androidannotations - 2017年Android百大框架

springmvc之自定义注解(annotation)

参考:日志处理 三:Filter+自定义注解实现 系统日志跟踪功能 1.项目结构 2.pom.xml,添加需要依赖 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://mav