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扫描包指定数据源,以上面的为例,只需要将来自同一数据库的表放在同一包下。

  • 相关阅读:
    表达式和计算的描述
    表达式和计算的描述
    递归算法浅谈
    编程基本功训练:流程图画法及练习
    【2012.1.24更新】不要再在网上搜索eclipse的汉化包了!
    VS2008下直接安装使用Boost库1.46.1版本号
    android关键组件service服务(一)
    U盘安装咱中国人自己的操作系统UbuntuKylin14.04LST(超具体原创图文教程)
    数据流图的画法
    匈牙利算法
  • 原文地址:https://www.cnblogs.com/alphajuns/p/11408579.html
Copyright © 2011-2022 走看看