您的位置:首页 > 编程语言 > Java开发

Multiple data source configuration spring+mybatis

2016-01-22 18:37 417 查看
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>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: