• 数据库事务设置方法


    在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

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

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

  • 相关阅读:
    docker volume
    Nginx 安装配置
    Shell test 命令,Shell 输入/输出重定向
    Shell 变量,Shell echo命令
    MongoDB数据库
    linux yum 命令
    Linux 磁盘管理,Linux vi/vim
    Python----Paramiko模块和堡垒机实战
    Linux 文件与目录管理,Linux系统用户组的管理
    Linux 忘记密码解决方法,Linux 远程登录
  • 原文地址:https://www.cnblogs.com/DeltaFish/p/9310693.html
Copyright © 2020-2023  润新知