spring+mybaits多个dao提交回滚事物。

  • 思路:

首先获取mybaits管理数据库连接的sqlsessionfactory,然后通过sqlsessionfactory获取对应的sqlsession,再通过sqlsession获取对应的connection对象,将其事物自动提交设为false,之后通过mybaits的getMapper方法,进行dao操作,之后可以通过conncection对象进行事物的提交和回滚。

  • 代码如下:

package com.javen.testmybatis;

import java.sql.SQLException;

import javax.annotation.Resource;  

import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.log4j.Logger;  
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.test.context.ContextConfiguration;  
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;  

import com.javen.dao.CategoryDAO;
import com.javen.dao.IUserDao;
import com.javen.model.Category;
import com.javen.model.User;
import com.javen.service.IUserService;
  
@RunWith(SpringJUnit4ClassRunner.class)     //表示继承了SpringJUnit4ClassRunner类  
@ContextConfiguration(locations = {"classpath:spring-mybatis.xml"})  
  
public class TestMyBatis {  
    private static Logger logger = Logger.getLogger(TestMyBatis.class);  
    private ApplicationContext ac = null;  
    @Resource  
    private IUserService userService = null;  
    @Resource
    private SqlSessionFactory sqlSessionFactory = null;
    private static ThreadLocal<SqlSession> threadLocal = new ThreadLocal<SqlSession>();
    SqlSession session = null;
  @Before  
  public void before() {  
      ac = new ClassPathXmlApplicationContext("spring-mybatis.xml");  
      userService = (IUserService) ac.getBean("userService");  
      //获取sqlSessionFactory对象
      sqlSessionFactory = (SqlSessionFactory) ac.getBean("sqlSessionFactory");
      session = sqlSessionFactory.openSession();
      threadLocal.set(session);
  }  
  
    @Test  
    public void test1() { 
        try {
            //获取数据库连接对象,设置自动提交为false
            session.getConnection().setAutoCommit(false);
        } catch (SQLException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        }
        //mybaits获取要操作的dao
        IUserDao userDao = session.getMapper(IUserDao.class);
        User user = new User();
        user.setId(1);
        user.setUserName("aaa");
        user.setPassword("aaa");
        user.setAge(1);
        //进行对应的dao操作
        int a = userDao.insert(user);
        CategoryDAO cateDao = session.getMapper(CategoryDAO.class);
        Category category = new Category(7,"cs");
        int b = cateDao.add(category);
          try {
              //通过连接对象进行提交操作【回滚则改为rollback】
            session.getConnection().commit();
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        System.out.println(a+"====="+b);
    }  
}  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值