为了账号安全,请及时绑定邮箱和手机立即绑定

Spring3.2.8+Mybatis3.2.6 多数据源基于BaseDAO的配置

标签:
MySQL


Spring3.2.8+Mybatis3.2.6 多数据源基于BaseDAO的配置

配置数据源为:

MySQL5.5.6

H2Database 1.3.75

这个配置起来比较麻烦,本文这种方法有点麻烦,就是dao不能再用注解了,但是程序简单。还有别的方法,后续放出。

spring-core.xml

<?xml version="1.0" encoding="UTF-8"?>

<beans default-autowire="byName"

       xmlns="http://www.springframework.org/schema/beans"

       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

       xsi:schemaLocation="http://www.springframework.org/schema/beans

            http://www.springframework.org/schema/beans/spring-beans.xsd

            http://www.springframework.org/schema/tx

            http://www.springframework.org/schema/tx/spring-tx.xsd

            http://www.springframework.org/schema/aop

            http://www.springframework.org/schema/aop/spring-aop.xsd

            http://www.springframework.org/schema/context

            http://www.springframework.org/schema/context/spring-context.xsd"

       xmlns:tx="http://www.springframework.org/schema/tx"

       xmlns:aop="http://www.springframework.org/schema/aop"

       xmlns:context="http://www.springframework.org/schema/context">

    <context:annotation-config/>

    <context:property-placeholder location="classpath*:framework/jdbc.properties"/>

    <!-- 配置系统的数据源 -->

    <bean id="dataSourceMySQL" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close">

        <property name="driverClassName" value="com.mysql.jdbc.Driver"/>

        <property name="url" value="jdbc:mysql://localhost:3306/qhtf"/>

        <property name="username" value="root"/>

        <property name="password" value="leizm"/>

        <property name="filters" value="stat"/>

        <property name="maxActive" value="10"/>

        <property name="initialSize" value="1"/>

        <property name="maxWait" value="60000"/>

        <property name="minIdle" value="1"/>

        <property name="timeBetweenEvictionRunsMillis" value="60000"/>

        <property name="minEvictableIdleTimeMillis" value="300000"/>

        <property name="validationQuery" value="SELECT 'x'"/>

        <property name="testWhileIdle" value="true"/>

        <property name="testOnBorrow" value="false"/>

        <property name="testOnReturn" value="false"/>

        <property name="poolPreparedStatements" value="true"/>

        <property name="maxPoolPreparedStatementPerConnectionSize" value="50"/>

        <property name="maxOpenPreparedStatements" value="100"/>

    </bean>

    <bean id="sqlSessionFactoryMySQL" class="org.mybatis.spring.SqlSessionFactoryBean">

        <property name="configLocation" value="classpath:framework/mybatis-config.xml"/>

        <property name="mapperLocations" value="classpath:/com/lavasoft/aac/entity/sqlmap/*.xml"/>

        <property name="dataSource" ref="dataSourceMySQL"/>

    </bean>

    <bean id="sqlSessionTemplateMySQL" class="org.mybatis.spring.SqlSessionTemplate">

        <constructor-arg index="0" ref="sqlSessionFactoryMySQL"/>

    </bean>

    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">

        <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>

        <property name="sqlSessionTemplateBeanName" value="sqlSessionTemplateMySQL"/>

        <property name="basePackage" value="com.lavasoft.aac.dao"/>

    </bean>

    <!-- 事务管理器配置,单数据源事务 -->

    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">

        <property name="dataSource" ref="dataSourceMySQL"/>

    </bean>

    <tx:advice id="txAdvice" transaction-manager="transactionManager">

        <tx:attributes>

            <tx:method name="select*" read-only="true"/>

            <tx:method name="get*" read-only="true"/>

            <tx:method name="load*" read-only="true"/>

            <tx:method name="find*" read-only="true"/>

            <tx:method name="query*" read-only="true"/>

            <tx:method name="count*" read-only="true"/>

            <tx:method name="read*" read-only="true"/>

            <tx:method name="sync*"/>

            <tx:method name="*" propagation="REQUIRED" rollback-for="Exception"/>

        </tx:attributes>

    </tx:advice>

    <aop:config>

        <aop:pointcut id="executeService" expression="execution(* com.lavasoft.aac.service.*SVImpl.*(..))"/>

        <aop:advisor pointcut-ref="executeService" advice-ref="txAdvice"/>

    </aop:config>

    <!-- ================================H2================================== -->

    <!--H2内存数据库配置-->

    <bean id="dataSourceH2" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close">

        <property name="driverClassName" value="org.h2.Driver"/>

        <property name="url" value="jdbc:h2:mem:/memdb;DB_CLOSE_DELAY=-1"/>

        <property name="username" value="sa"/>

        <property name="password" value=""/>

        <property name="filters" value="stat"/>

        <property name="maxActive" value="10"/>

        <property name="initialSize" value="1"/>

        <property name="maxWait" value="60000"/>

        <property name="minIdle" value="1"/>

        <property name="timeBetweenEvictionRunsMillis" value="60000"/>

        <property name="minEvictableIdleTimeMillis" value="300000"/>

        <property name="validationQuery" value="SELECT 'x'"/>

        <property name="testWhileIdle" value="true"/>

        <property name="testOnBorrow" value="false"/>

        <property name="testOnReturn" value="false"/>

        <property name="poolPreparedStatements" value="true"/>

        <property name="maxPoolPreparedStatementPerConnectionSize" value="50"/>

        <property name="maxOpenPreparedStatements" value="100"/>

    </bean>

    <bean id="sqlSessionFactoryH2" class="org.mybatis.spring.SqlSessionFactoryBean">

        <property name="configLocation" value="classpath:framework/h2SqlMapConfig.xml"/>

        <property name="mapperLocations" value="classpath:/com/lavasoft/aac/entity/sqlmap/*.xml"/>

        <property name="dataSource" ref="dataSourceH2"/>

    </bean>

    <bean id="sqlSessionTemplateH2" class="org.mybatis.spring.SqlSessionTemplate">

        <constructor-arg index="0" ref="sqlSessionFactoryH2"/>

    </bean>

    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">

        <property name="sqlSessionFactoryBeanName" value="sqlSessionFactoryH2"/>

        <property name="sqlSessionTemplateBeanName" value="sqlSessionTemplateH2"/>

        <property name="basePackage" value="com.lavasoft.aac.daoh2"/>

    </bean>

    <bean id="baseDAO" class="com.lavasoft.framework.core.BaseMybatisDAO" abstract="true">

        <property name="sqlSessionFactory" ref="sqlSessionFactoryH2"/>

        <property name="sqlSessionTemplate" ref="sqlSessionTemplateH2"/>

    </bean>

    <bean id="transactionManagerH2" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">

        <property name="dataSource" ref="dataSourceH2"/>

    </bean>

    <tx:advice id="h2txAdvice" transaction-manager="transactionManagerH2">

        <tx:attributes>

            <tx:method name="create*" rollback-for="Exception"/>

            <tx:method name="delete*" rollback-for="Exception"/>

            <tx:method name="save*" rollback-for="Exception"/>

            <tx:method name="insert*" rollback-for="Exception"/>

            <tx:method name="update*" rollback-for="Exception"/>

            <tx:method name="*" read-only="true" rollback-for="Exception"/>

        </tx:attributes>

    </tx:advice>

    <aop:config>

        <aop:pointcut id="executeServiceH2" expression="execution(* com.lavasoft.ntv.service.*SVImpl.*(..))"/>

        <aop:advisor pointcut-ref="executeServiceH2" advice-ref="h2txAdvice"/>

    </aop:config>

</beans>

spring-back.xml

<?xml version="1.0" encoding="UTF-8"?>

<beans default-autowire="byName"

       xmlns="http://www.springframework.org/schema/beans"

       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

       xsi:schemaLocation="http://www.springframework.org/schema/beans

            http://www.springframework.org/schema/beans/spring-beans.xsd

            http://www.springframework.org/schema/context

            http://www.springframework.org/schema/context/spring-context.xsd"

       xmlns:context="http://www.springframework.org/schema/context">

    <context:annotation-config/>

    <!--<context:component-scan base-package="com.lavasoft.aac.daoh2" resource-pattern="Sys_userDAO.class"/>-->

    <context:component-scan base-package="com.lavasoft.aac.service" resource-pattern="H2SV.class"/>

    <!--<context:component-scan base-package="com.lavasoft.aac.dao" resource-pattern="*DAO.class"/>-->

    <!--<context:component-scan base-package="com.lavasoft.aac.service" resource-pattern="*SVImpl.class"/>-->

    <bean id="sys_userDAO" class="com.lavasoft.aac.daoh2.Sys_userDAO" parent="baseDAO"/>

    <import resource="classpath:/framework/spring-core.xml"/>

</beans>

BaseMybatisDAO

/**

 * 通用DAO的Mybatis实现

 *

 * @author leizhimin 11-12-12 下午10:42

 */

public abstract class BaseMybatisDAO<E, PK extends Serializable> extends SqlSessionDaoSupport implements GenericDAO<E, PK> {

    protected String sqlmapNamespace;   //ibatis sql map的命名空间,即使用实体类的简单名称

    protected Class entityType;         //运行时的实体类型,也对应为SQL的命名空间。

    @Override

    public void setSqlSessionFactory(SqlSessionFactory sqlSessionFactory) {

        super.setSqlSessionFactory(sqlSessionFactory);

    }

    @Override

    public void setSqlSessionTemplate(SqlSessionTemplate sqlSessionTemplate) {

        super.setSqlSessionTemplate(sqlSessionTemplate);

    }

BaseMybatisDAO省略具体实现代码,仅保留需要注入的两个setter方法。

测试下:

DEBUG 2014-04-16 17:33:35 org.mybatis.spring.SqlSessionUtils:104 - Creating a new SqlSession

DEBUG 2014-04-16 17:33:35 org.mybatis.spring.SqlSessionUtils:140 - SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@d58ce2] was not registered for synchronization because synchronization is not active

DEBUG 2014-04-16 17:33:35 org.springframework.jdbc.datasource.DataSourceUtils:110 - Fetching JDBC Connection from DataSource

DEBUG 2014-04-16 17:33:35 org.mybatis.spring.transaction.SpringManagedTransaction:86 - JDBC Connection [com.alibaba.druid.proxy.jdbc.ConnectionProxyImpl@1a7789c] will not be managed by Spring

DEBUG 2014-04-16 17:33:35 Sys_user.insert:139 - ==>  Preparing: insert into sys_user( fullname, account, password, salt, isExpired, isLock, createtime, status, email, mobile, phone, sex, picture, fromtype ) values( ?, ?, ?, ?, ?, ?, now(), ?, ?, ?, ?, ?, ?, ? )

DEBUG 2014-04-16 17:33:35 Sys_user.insert:139 - ==> Parameters: leizm(String), asdfa(String), 23492399(String), null, 0(Integer), 0(Integer), 0(Integer), asdf@asdf.com(String), 139232302033(String), null, null, null, 0(Integer)

DEBUG 2014-04-16 17:33:35 Sys_user.insert:139 - <==    Updates: 1

DEBUG 2014-04-16 17:33:35 com.alibaba.druid.pool.PreparedStatementPool:123 - {conn-10002, pstmt-20003} enter cache

DEBUG 2014-04-16 17:33:35 org.mybatis.spring.SqlSessionUtils:168 - Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@d58ce2]

DEBUG 2014-04-16 17:33:35 org.springframework.jdbc.datasource.DataSourceUtils:327 - Returning JDBC Connection to DataSource

1

Process finished with exit code 0

©著作权归作者所有:来自51CTO博客作者leizhimin的原创作品,如需转载,请注明出处,否则将追究法律责任

spring mybaitsORM/持久化


点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消