在Mybatis提供的两种事务管理机制中,选择使用JDBC的事务管理机制,也就是利用java.sql.Connection对象完成对事务的提交。
所必须导入的包为:import java.sql.Connection;
其中,所有的接口实现类统一格式为
try{
conn.setAutoCommit(false); //功能实现,例如插入、查找、删除 sqlSession.commit(); } catch(Exception e){ e.printStackTrace(); sqlSession.rollback(); finally{ sqlSession.close(); }
即可根据是否出现异常,决定是提交还是回滚,达到事务的要求。
注意,要将自动提交功能关闭。
例如如下代码:
public class TestBooksMapper extends BeforeBooksMapper{ @Test public void testInsertUser(){ SqlSession sqlSession = getSqlSession(); Connection conn = sqlSession.getConnection(); try{ conn.setAutoCommit(false); // 获取RoleMapper接口 BooksMapper roleMapper = sqlSession.getMapper(BooksMapper.class); Books sysRole = new Books(); sysRole.setBookId("a11111111"); sysRole.setBookName("南方树叶"); sysRole.setEdition("第一版"); sysRole.setOperation("3"); roleMapper.insertSelective(sysRole); Books sysRole1 = new Books(); sysRole1.setBookId("1111111"); // sysRole1.setBookName("西方树叶"); sysRole1.setEdition("第8版"); sysRole1.setOperation("4"); roleMapper.insertSelective(sysRole1); sqlSession.commit(); } catch (Exception e) { e.printStackTrace(); System.out.println("Warning!"); sqlSession.rollback(); } finally{ sqlSession.close(); } } }
在第二本书的 new 的过程中,讲书名部分注释。因为要求书名不能为空,插入操作出现异常,转入catch,进行回滚。
显然,表中没有记录
若不设置自动提交,即代码改如如下形式:
public class TestBooksMapper extends BeforeBooksMapper{ @Test public void testInsertUser(){ SqlSession sqlSession = getSqlSession(); Connection conn = sqlSession.getConnection(); try{ conn.setAutoCommit(true); // 获取RoleMapper接口 BooksMapper roleMapper = sqlSession.getMapper(BooksMapper.class); Books sysRole = new Books(); sysRole.setBookId("a11111111"); sysRole.setBookName("南方树叶"); sysRole.setEdition("第一版"); sysRole.setOperation("3"); roleMapper.insertSelective(sysRole); Books sysRole1 = new Books(); sysRole1.setBookId("1111111"); // sysRole1.setBookName("西方树叶"); sysRole1.setEdition("第8版"); sysRole1.setOperation("4"); roleMapper.insertSelective(sysRole1); sqlSession.commit(); } catch (Exception e) { e.printStackTrace(); System.out.println("Warning!"); sqlSession.rollback(); } finally{ sqlSession.close(); } } }
则第一个插入操作执行完后,已经被提交
表中也出现了第一本书的信息。