zoukankan      html  css  js  c++  java
  • 通过自定义注解区分数据源

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

  • 相关阅读:
    10分钟轻松设置出 A+ 评分的 HTTP/2 网站
    GGSN与SGSN简介
    cocos游戏开发小白教程网站
    cocos2d-x JS 字符串
    cocos2d-x android工程接入第三方支付宝SDK
    pyCharm编辑器激活使用
    cocos2d-x C++ iOS工程集成第三方支付宝支付功能
    (已解决)在linux的虚拟机上安装vmware tools(实现windows与虚拟机之间的文件交互复制粘贴)
    虚拟机 liunx系统以 root 身份登录权限
    mac系统搭建SVN版本控制
  • 原文地址:https://www.cnblogs.com/alphajuns/p/11408579.html
Copyright © 2011-2022 走看看