mybatis与spring整合

Posted 龚轩明

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mybatis与spring整合相关的知识,希望对你有一定的参考价值。

1.Spring同mybatis的整合步骤?

DataSource(主要提供的数据源)

 

                 

 
 

整合SqlSessionFactory(代表的是mybatis的配置)

 

 

 

 

整合的代码:

<bean id="dataSource" destroy-method="close" class="com.mchange.v2.c3p0.ComboPooledDataSource">

      <property name="driverClass" value="oracle.jdbc.driver.OracleDriver"/>

      <property name="jdbcUrl" value="jdbc:oracle:thin:@localhost:1521:orcl"/>

      <property name="user" value="hotelsup"/>

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

      <property name="maxPoolSize" value="40"/>

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

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

      <property name="maxIdleTime" value="60"/>

      <property name="checkoutTimeout" value="2000"/>

   </bean>

   <!-- 配置SqlSessionFactory -->

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

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

      <!-- 指的是当前的mybatis的配置文件 -->

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

   </bean>

 

2.spring提供的aop对于业务层的事务实现(声明式事务处理)。

transactionManager(表示jdbc的事务处理)

 

 

AOP的整合

 

 

通用方法

 

 

           
     
     

业务方法

 
 

 

 

 

 

在applicationContext.xml里的配置:

<!-- 配置spring的声明式事务 -->

    <!-- 事务管理的bean -->

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

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

   </bean>

    <!-- 声明式事务的配置 -->

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

         <!-- 事务的定义 -->

         <tx:attributes>

            <!-- propagation称之为事务的传播性 -->

            <tx:method name="*" rollback-for="EXCEPTION" propagation="REQUIRED"/><!-- 所有的方法全部加入到事务中 -->

            <tx:method name="get*" propagation="NEVER"/><!-- 不执行事务操作 -->

            <tx:method name="set*" propagation="NEVER"/><!-- 不执行事务操作 -->

         </tx:attributes>

    </tx:advice>

    <!-- AOP编程实现 -->

    <aop:config>

          <!-- 切入点的配置,哪些类或者哪些方法进入到切面中 -->

          <aop:pointcut expression="execution(* com.jinglin.hotelsup.service..*(..))" id="allMethods"/>

          <!-- 把切入点同事务整合在一起 -->

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

    </aop:config>

    <!-- 使用annotation定义事务,这样就可以通过注解去管理业务层的事务 -->

    <tx:annotation-driven transaction-manager="transactionManager" proxy-target-class="true" />

3.将三层架构中的dao层(mapper接口)以及业务层加入到spring中。(开启包的扫描,就是直接将一个包里所有的类扫描到spring中),首先扫描mapper代理对象(就是dao层),然后扫描service层(里面会用到自动装配)

<!-- 通过spring的包的扫描的方式将这些包里的类扫描到spring的容器里 -->

    <!-- 开启注解配置-->

    <context:annotation-config/>

    <!-- 对dao层的扫描,实际就是批量生成dao层的bean对象

         生成的规则:bean的id名实际就是dao层类或接口的首字母小写

       比如,UserInfoMapper->userInfoMapper

          GoodsInfoMapper->goodsInfoMapper

    -->

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

        <!-- 配置扫描的包名 -->

        <property name="basePackage" value="com.jinglin.hotelsup.dao.imp"></property>

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

    </bean>

    <!-- 将service层全部扫描到spring容器里 -->

    <context:component-scan base-package="com.jinglin.hotelsup.service"/>

 

然后在service层里注解每个service类,然后调用dao层的对象的时候直接自动装配,代码如下:

@Service表示的是它是一个业务层的类,被扫描到spring中的

@Transactional

@Service

public class UserInfoService {

    //注入的dao层,自动装配

    @Autowired 

    private UserInfoMapper userInfoMapper;

   

    public List<UserInfo> getallusers(){

    return userInfoMapper.getlist();

    }

  

    public int adduser(UserInfo u){

    userInfoMapper.additem(u);

    return u.getUserid();

    }

  

    @Transactional(propagation=Propagation.NOT_SUPPORTED)

    public List<UserInfo> allusers(){

    return userInfoMapper.getlist();

    }

   

}

以上是关于mybatis与spring整合的主要内容,如果未能解决你的问题,请参考以下文章

mybatis源码阅读mybatis与spring整合原理

Mybatis与Spring整合

Mybatis 与 spring 整合

Spring与MyBatis整合

spring学习 六 spring与mybatis整合

spring与mybatis三种整合方法