2016-07-24 50 views
0

我目前正在開發一個已經實現了mybatis的項目。 由於這是一個遺留代碼,執行使用如何在Mybatis項目中實現事務管理

  1. 春天做
  2. MyBatis的
  3. JAXRS

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{ 

} 

我如何在這裏實現事務管理器,請幫助?

回答

0

有許多方法可以做到這一點,尤其是考慮到你已經配置了彈簧。基本上你需要配置兩個東西

  1. 事務管理
  2. 事務邊界

事務管理

你需要在你的Spring上下文定義transaction manager。取決於你的sqlSessionFactory定義中提到的dataSource來自哪裏,它可能會有所不同。最有可能你使用連接池在你的項目是你有一些像這樣的連接池的配置:

<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> 

如果是這種情況,那麼你需要這樣的添加配置到你Spring上下文

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

事務邊界

最簡單的方法是使用annotation driven事務劃分。

然後,你需要先打開它:

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

有了這個配置,你可以使用Transactional標註來標記你的服務方法:

@Transactional 
public void insert(){ 

} 

@Transactional(readOnly=true) 
public void find(){ 

}