如何在Mybatis项目中实现事务管理

时间:2016-07-24 14:26:34

标签: spring jax-rs mybatis

我目前正在开发一个已实施mybatis的项目。 由于这是遗留代码,因此使用

完成实现
  1. 弹簧
  2. MyBatis的
  3. JAXRS
  4. Spring应用程序上下文文件

        <bean id="sqlSessionFactory"         class="com.ca.aa.ui.framework.common.mybatis.SqlSessionFactoryBeanWrapper">
        <property name="dataSource" ref="dataSource" />
        <property name="mapperLocations" value="classpath*:ibatis/*_mapper.xml" />
    
    </bean>
    

    还有另一个从应用程序上下文引用的xml文件

    <bean class="org.mybatis.spring.mapper.MapperFactoryBean" name="tenantDAO">
        <property name="mapperInterface"   value="com.ca.ias.data.dao.TenantDAO"  />
        <property name="sqlSessionFactory" ref="sqlSessionFactory" />
    </bean>
    

    TenantDAO.java

    public interface TenantDAO {
    
    public List<something> somemethod1();
    
    }
    

    然后有一个服务层访问上面的java类adn然后持久化对象

    <bean id="issuerService" class="com.ca.ias.admin.service.IssuerServiceImpl">
        <property name="tenantDAO" ref="tenantDAO"/>
    </bean>
    

    有一个普通的java方法,它调用tenantDAO然后保留该对象。

    IssuerServiceImpl.java

    public void insert(){
    
    try{
       tenantDao.insert();
    }catch(Exception e){
    
    }finally{
    
    }
    

    如何在此处实施交易管理器,请帮忙?

1 个答案:

答案 0 :(得分:0)

有很多方法可以做到这一点,特别是考虑到你已经配置了弹簧。基本上你需要配置两件事

  1. 交易经理
  2. 交易边界
  3. 交易管理员

    您需要在弹簧上下文中定义transaction manager。根据{{​​1}}定义中提到的dataSource的位置,它可能会有所不同。很可能你在项目中使用连接池,你有一些连接池的配置,如下所示:

    sqlSessionFactory

    如果是这种情况,那么您需要在弹簧上下文中添加这样的配置

    <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" 
        destroy-method="close">
       <property name="driverClassName" value="${jdbc.driverClassName}" />
       <property name="url" value="${jdbc.url}" />
       <property name="username" value="${jdbc.username}" />
       <property name="password" value="${jdbc.password}" />
    </bean> 
    

    交易边界

    最简单的方法是使用annotation driven事务划分。

    然后你需要先启用它:

    <bean id="txManager" 
         class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
      <property name="dataSource" ref="dataSource"/>
    </bean>
    

    使用此配置,您可以使用<tx:annotation-driven transaction-manager="txManager"/> 注释标记服务中的方法:

    Transactional