赞
踩
SqlSession对象
- getMapper(DAO.class):获取Mapper (DAO接口的实例)
- 事务管理
factory.openSession()
或 factory.openSession(false)
sqlSession.commit()
trycatch
,抛出异常,使用 sqlSession.rollback()
回滚factory.openSession(true)
trycatch
,抛出异常,使用 sqlSession.rollback()
回滚,也只是回滚出错的那一条操作,之前的操作已经自动提交了public class MyBatisUtil { private static SqlSessionFactory factory; private static ThreadLocal<SqlSession> threadLocal = new ThreadLocal<SqlSession>(); static { try { InputStream is = Resources.getResourceAsStream("mybatis-config.xml"); factory = new SqlSessionFactoryBuilder().build(is); } catch (IOException e) { e.printStackTrace(); } } private static SqlSession getSqlSession(boolean isAutoCommit){ SqlSession sqlSession = threadLocal.get(); if( sqlSession == null ){ // 通过SqlSessionFactory调用openSession方法,获取sqlSession对象时,可以通过参数设置事务是否自动提交 // factory.openSession(true) 自动提交 // factory.openSession() 或 factory.openSession(false) 手动提交 sqlSession = factory.openSession(isAutoCommit); threadLocal.set(sqlSession); } return sqlSession; } public static SqlSessionFactory getFactory(){ return factory; } public static SqlSession getSqlSession(){ // 返回sqlSession对象,因此希望进行事务管理,所以使用手动提交 return getSqlSession(false); } public static <T extends Object> T getMapper(Class<T> c){ // 不对外输出获取sqlSession对象,因此不想进行事务管理,所以使用自动提交 return getSqlSession(true).getMapper(c); } }
@org.junit.Test public void insertStudent() { // 手动事务管理 SqlSession sqlSession = MyBatisUtil.getSqlSession(); // 获取sqlSession对象,就默认开启事务 try{ // 通过会话,获取DAO对象 StudentDao studentDao = sqlSession.getMapper(StudentDao.class); // 调用被测试方法 Student student = new Student(0, "10004", "张三", "男", 20); int i = studentDao.insertStudent(student); // 手动提交事务:如果一个中间的某一个操作出错,就不会执行commit,于是就会执行rollback,取消之前的操作 // 自动提交事务:每一个操作都会提交,当中间的某一个操作出错,不会回滚之前的操作 // 如果有多个操作,需要手动提交事务,否则会破坏数据的一致性 // 操作完成并成功后,需要手动提交事务,同步到数据库 sqlSession.commit(); }catch(Exception e){ // 操作出现异常,调用rollback进行回滚 sqlSession.rollback(); } } @Test public void queryStudentList() { try{ StudentDao studentDao = MyBatisUtil.getMapper(StudentDao.class); List<Student> students = studentDao.queryStudentList(); }catch(Exception e){ // 操作出现异常,调用rollback进行回滚 sqlSession.rollback(); } }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。