spring整合mybatis的几种配置方式

Spring与Mybatis进行整合,主要是体现在DAO层的XML配置以及mybatis的XML配置,springMVC配置文件与service层的配置文件都不做更改,那么在这里,springMVC的xml配置就不进行累述了,下面直接进入spring与mybatis的整合配置阶段,废话不多说,直接上配置如下:

首先mybatis的sqlMapConfig.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="jdbcTypeForNull" value="NULL"/>

    settings>

<typeAliases>

   

    <package name="com.p2p.PO"/>

typeAliases>

   <mappers >

        <mapper resource="com/p2p/sql/ProductCategoryMapper.xml"/>

  mappers>

configuration>

 方式一、采用MapperScannerConfigurer,它将会查找类路径下的映射器并自动将它们创建成MapperFactoryBean

ApplicationContext-dao.xml

       

       <context:property-placeholder location="classpath:config/db.properties"/>

       

       <bean id="dataSource"class="org.springframework.jdbc.datasource.DriverManagerDataSource">

           <property name="driverClassName" value="${jdbc.driver}">property>

           <property name="url" value="${jdbc.url}">property>

           <property name="username" value="${jdbc.username}">property>

           <property name="password" value="${jdbc.password}">property>

       bean>

     

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

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

         加载mybatis配置文件 -->

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

     bean>

     

         "basePackage"value="com.p2p.mapper">

         "sqlSessionFactoryBeanName"value="sqlSessionFactory">

    

    

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

    

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

    bean>

     <tx:annotation-driven transaction-manager="transactionManager" />     

     

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

     <tx:attributes>

     

     <tx:method name="save*"propagation="REQUIRED">tx:method>

     <tx:method name="delete*"propagation="REQUIRED">tx:method>

     <tx:method name="insert*"propagation="REQUIRED">tx:method>

     <tx:method name="update*"propagation="REQUIRED">tx:method>

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

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

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

     tx:attributes>

     tx:advice>

     

     <aop:config>

         <aop:pointcut expression="execution(* com.p2p.service.impl.*.*(..))"id="transactionPointcut"/>

         <aop:advisor advice-ref="txAdive" pointcut-ref="transactionPointcut"/>

     aop:config>

  beans>

采用以上这种方式进行整合配置需要注意以下几点:  

1mapper层接口采用注解@MapperScan的形式进行配置,如果是mapper和mapper.xml是在同包下,就不需要注解,但是名称必须一致

2、在service层使用@Resource注入mapper,方才可以通过注入的mapper调用mapper接口下的方法

3、此种方式导致写一句SQL就要在接口中对应添加一个同名方法,否则服务启动就报错

  mapper接口示例:

@MapperScan

public interfaceProductCategoryMapper {

public voidupdate_test1()throws SQLException;

public voidupdate_test()throws SQLException;

  }

       

方式二、采用接口org.apache.ibatis.session.SqlSession的实现类org.mybatis.spring.SqlSessionTemplate。

ApplicationContext-dao.xml

   

    "com.p2p.DAO"/>      

   

    <context:property-placeholder location="classpath:config/db.properties"/>  

   

    <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">

        <property name="driverClassName" value="${jdbc.driver}">property>

        <property name="url" value="${jdbc.url}">property>

        <property name="username" value="${jdbc.username}">property>

        <property name="password" value="${jdbc.password}">property>

       

        <property name="initialSize" value="${initialSize}">property>

       

        <property name="maxActive" value="${maxActive}">property>

       

        <property name="maxIdle" value="${maxIdle}">property>

       

        <property name="minIdle" value="${minIdle}">property>

       

        <property name="maxWait" value="${maxWait}">property>

    bean>

   

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

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

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

    bean>

     

    "sqlSessionTemplate"class="org.mybatis.spring.SqlSessionTemplate">

        "0"ref="sqlSessionFactory">

   

    

   

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

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

    bean>

   

   

     <tx:annotation-driven transaction-manager="transactionManager" />     

   

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

        <tx:attributes>

   

    <tx:method name="save*" propagation="REQUIRED">tx:method>

    <tx:method name="delete*" propagation="REQUIRED">tx:method>

    <tx:method name="insert*" propagation="REQUIRED">tx:method>

    <tx:method name="update*" propagation="REQUIRED">tx:method>

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

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

    <tx:method name="select*" propagation="SUPPORTS"read-nly="true">tx:method>

tx:attributes>

    tx:advice>

   

    <aop:config>

<aop:pointcut expression="execution(* com.p2p.service.impl.*.*(..))"id="transactionPointcut"/>

        <aop:advisor advice-ref="txAdive" pointcut-ref="transactionPointcut"/>

    aop:config>

beans>         


采用以上这种方式进行整合配置需要注意以下几点:  

1DAO层类采用注解@Repository的形式进行配置,并且配置文件中必须有包扫描器扫描DAO

2、通过注解@Resource注入模板,通过模板调用模板类的公共方法,只需要在DAO层实现类中写几个公共方法

3、在service层直接通过注解@Resource注入这个dao就可以使用了,service层传入SQLID来区别执行哪句SQL,通用性还是不错的

DAO层公共示例:

@Repository

public classProductCategoryDao {

        @Resource

        private SqlSessionTemplatesqlSessionTemplate;

        public voidupdate(String name) {

            sqlSessionTemplate.update(name, null);

        }   

}

 

三、采用抽象类org.mybatis.spring.support.SqlSessionDaoSupport提供SqlSession。

ApplicationContext-dao.xml

  

    <context:component-scan base-package="com.p2p.DAO" />     

   

    <context:property-placeholder location="classpath:config/db.properties"/>  

   

    <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">

        <property name="driverClassName" value="${jdbc.driver}">property>

        <property name="url" value="${jdbc.url}">property>

        <property name="username" value="${jdbc.username}">property>

        <property name="password" value="${jdbc.password}">property>

       

        <property name="initialSize" value="${initialSize}">property>

       

        <property name="maxActive" value="${maxActive}">property>

       

        <property name="maxIdle" value="${maxIdle}">property>

       

        <property name="minIdle" value="${minIdle}">property>

       

        <property name="maxWait" value="${maxWait}">property>

    bean>

   

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

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

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

    bean>

     

   

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

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

    bean>

   

   

     <tx:annotation-driven transaction-manager="transactionManager" />     

   

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

        <tx:attributes>

   

    <tx:method name="save*" propagation="REQUIRED">tx:method>

    <tx:method name="delete*" propagation="REQUIRED">tx:method>

    <tx:method name="insert*" propagation="REQUIRED">tx:method>

    <tx:method name="update*" propagation="REQUIRED">tx:method>

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

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

    <tx:method name="select*" propagation="SUPPORTS"read-nly="true">tx:method>

tx:attributes>

    tx:advice>

   

    <aop:config>

<aop:pointcut expression="execution(* com.p2p.service.impl.*.*(..))"id="transactionPointcut"/>

        <aop:advisor advice-ref="txAdive" pointcut-ref="transactionPointcut"/>

    aop:config>

beans>    

 

 采用以上这种方式进行整合配置需要注意以下几点:  

1、通过注解@Repository配合包扫描器,将sqlSessionFactory注入-

2、使用SqlSessionDaoSupport必须注意,此处源码1.1.1中有自动注入,1.2中取消了自动注入,需要手工注入,侵入性强

3、也可在spring-mybatis.xml中如下配置,在service层注入这个bean,但是这种有多少个dao就要配置多少个,多个dao就很麻烦。

// 

//      ref="sqlSessionFactory"/>

// 

4xml配置文件中必须使用包扫描器扫描DAO层,否则注入失败

5、只需要DAO写几个公共增删改查方法就好,通过传入sqlID辨别需要执行哪句SQL

 示例:

@Repository

public classProductCategoryDao extends SqlSessionDaoSupport{

   

    @Resource

    public voidsetSqlSessionFactory(SqlSessionFactory sqlSessionFactory) {

       System.out.println("[session]"+sqlSessionFactory);

        super.setSqlSessionFactory(sqlSessionFactory);

    }

       

        public voidupdate(String name) {

        this.getSqlSession().update(name, null);

        }   

}   


PS: 以上就是spring与mybatis进行整合的几种配置方式,特此记录一下


你可能感兴趣的:(spring)