- 思路:
首先获取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);
}
}