日期:2014-05-20  浏览次数:20716 次

单独的使用mybatis 怎么来管理事务
例如:
表:user
映射文件:userMapper.xml
dao接口:userMapper.java
service接口:userService.java
service实现:userServiceImpl.java

这些都比较简单就不贴出来了

在userServiceImpl中(getSession()是dbopreate.java 获得的SqlSession)

userMapper userDao=getSession().getMapper(UserMapper.class);
userDao.select();
...



但是如果是要进行事务的话,就要在userServiceImpl的一个方法中:

public void doxxxxx(){
 TransactionFactory transactionFactory = new JdbcTransactionFactory();
 userMapper userDao=getSession().getMapper(UserMapper.class);
 Transaction newTransaction=transactionFactory.newTransaction(getSession().getConnection());
 try {
  userDao.insert(xxx);
  userDao.update(xxx);
 } catch (Exception e) {
  newTransaction.rollback();
  e.printStackTrace();
 } finally {
    newTransaction.close();
 }
}


这样的话每一个impl的每一个有关事务的方法都要这么写,觉得太麻烦
所以就想怎么把这个事务管理抽离出来,就像整合spring那样切面的管理
没用spring是因为不是web项目是个java窗体的管理程序.......
我自己老子不太好事 求好心人、高人指点
MyBatis 事务 管理

------解决方案--------------------
pubic class BaseServiceImp
{
   static {
            TransactionFactory transactionFactory = new JdbcTransactionFactory();
 
            Transaction        newTransaction=transactionFactory.newTransaction(getSession().getConnection());
           }
}

public class userServiceImp extends BaseServiceImp
{

public void doxxxxx(){
 
 userMapper userDao=getSession().getMapper(UserMapper.class);
 
 try {
  userDao.insert(xxx);
  userDao.update(xxx);
 } catch (Exception e) {
  newTransaction.rollback();
  e.printStackTrace();
 } finally {
    newTransaction.close();
 }
}

}