Multiple data source configuration spring+mybatis

Spring + Mybatis, Multiple data source configuration:


suit for : spring3.2.4RELEASE / mybatis3.3.0 / mybatis-spring1.2.2 


<1>
datasource-jdbc.properties file:
jdbc.url=DbUrl
jdbc.username=username
jdbc.password=password


jdbc.appName.url=DbUrl2
jdbc.appName.username=username2
jdbc.appName.password=password2


<2>
applicationContext file :
<!--DriverManagerDataSource extends org.springframework.jdbc.datasource.AbstractDriverBasedDataSource, Override some methods, eg: password Decrypt and so on -->
<bean id="dataSource1" class="com.company.project......DriverManagerDataSource">
<property name="driverClassName" value="oracle.jdbc.driver.OracleDriver" />
<property name="url">
<value>${jdbc.url}</value>
</property>
<property name="username">
<value>${jdbc.username}</value>
</property>
<property name="password">
<value>${jdbc.password}</value>
</property>
</bean>
<bean id="dataSource2" class="com.company.project......DriverManagerDataSource">
<property name="driverClassName" value="oracle.jdbc.driver.OracleDriver" />
<property name="url">
<value>${jdbc.appName.url}</value>
</property>
<property name="username">
<value>${jdbc.appName.username}</value>
</property>
<property name="password">
<value>${jdbc.appName.password}</value>
</property>
</bean>


<bean id="firstSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean" >
<property name="configLocation" value="classpath:myBatis_configuration.xml" />
<property name="dataSource" ref="dataSource1" />
</bean>
<bean id="secondSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean" >
<property name="configLocation" value="classpath:myBatis_configuration.xml"/>
<property name="dataSource" ref="dataSource2" />
</bean>


<bean id="AclassAbstractDAO" abstract="true">
<property name="sqlSessionFactory" ref="firstSessionFactory" />
</bean>
<bean id="BclassAbstractDAO" abstract="true">
<property name="sqlSessionFactory" ref="secondSessionFactory" />
</bean>


<bean id="AclassDao" parent="AclassAbstractDAO" class="com.company.project......dao.impl.AclassDaoImpl"></bean>
<bean id="BclassDao" parent="BclassAbstractDAO" class="com.company.project......dao.impl.BclassDaoImpl"></bean>


<3>
AclassDaoImpl class :
(1) extends SqlSessionDaoSupport
(2)
@Autowired(required = true)
@Qualifier("firstSessionFactory")
public void setSqlSessionFactory(SqlSessionFactory sqlSessionFactory){  
super.setSqlSessionFactory(sqlSessionFactory);  



BclassDaoImpl class :
(1) extends SqlSessionDaoSupport
(2)
@Autowired(required = true)
@Qualifier("secondSessionFactory")
public void setSqlSessionFactory(SqlSessionFactory sqlSessionFactory){  
super.setSqlSessionFactory(sqlSessionFactory);  



<4>
myBatis_configuration.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
    <settings>
        <setting name="cacheEnabled" value="true" />  
        <setting name="lazyLoadingEnabled" value="true" />  
        <setting name="aggressiveLazyLoading" value="false" />  
        <setting name="multipleResultSetsEnabled" value="true" />  
        <setting name="useColumnLabel" value="true" />  
        <setting name="autoMappingBehavior" value="FULL" />  
        <setting name="defaultExecutorType" value="BATCH" />  
        <setting name="defaultStatementTimeout" value="25000" />  
    </settings>
    <typeAliases>
        <typeAlias alias="alias1" type="com.company.project......EntityName1" />
        <typeAlias alias="alias2" type="com.company.project......EntityName2" />
    </typeAliases>


    <mappers>
        <mapper resource="mybatis/mybatisSubConfig1.xml" />
        <mapper resource="mybatis/mybatisSubConfig2.xml" />
    </mappers>
</configuration>


<5>
mybatisSubConfig1.xml
(1) need namespace
(2) mybatis directly using sql which packaged in the background
(3) batch insert/delete/update


<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
  PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.company.project......dao.Adao">
    <select id="selectMappingName" parameterType="map" resultType="java.util.HashMap"  statementType="STATEMENT">
        ${sql}
    </select>

<insert id="insertMappingName" parameterType="java.util.List">
        insert into tableName
        <foreach collection="list" item="item" index="index" separator="union all">
            (select 
            #{item.columnA}, #{item.columnB}, ......
            from dual
            )
        </foreach>
    </insert>

<delete id="deleteMappingName"  parameterType="java.util.List">
        delete from
        app_batch_job_latest_status
        <where>
            <foreach collection="list" index="index" item="item" open="(" separator="or" close=")">
                (
                DbTableColumnA = #{item.columnA}
                and 
DbTableColumnB = #{item.columnB}
                )
            </foreach>
        </where>
    </delete>

<update id="updateMappingName" parameterType="java.util.List">
        <foreach collection="list" item="item" index="index" open="begin" close=";end;" separator=";">
            update app_batch_job_latest_status
            <set>    
                DbTableColumnA = #{item.columnA},
                DbTableColumnB = #{item.columnB},
......
DbTableColumnN = #{item.columnN}
            </set>
            where DbTableColumnX =#{item.columnX} 
and DbTableColumnY = #{item.columnY}
        </foreach>
    </update>
</mapper>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值