zoukankan      html  css  js  c++  java
  • 数据库事务设置方法

    在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();
            }
        }
    }
    View Code

    在第二本书的 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();
            }
        }
    }
    View Code

    则第一个插入操作执行完后,已经被提交

    表中也出现了第一本书的信息。

  • 相关阅读:
    Winform 时间
    button的后台点击事件
    Winform文本框只能输入限定的文本
    vue的生命周期函数
    ES6新增语法
    购物车案例(JavaScript动态效果)
    前端es6总结
    jQuery与vue的区别是什么?
    vue实现双向绑定原理
    JS实现简单分页功能
  • 原文地址:https://www.cnblogs.com/DeltaFish/p/9310693.html
Copyright © 2011-2022 走看看