• 数据库事务设置方法


    在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

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

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

  • 相关阅读:
    C#之线程
    C#反射与进程
    C# XML文件的读取
    超简单的js实现提示效果弹出以及延迟隐藏的功能
    使用JavaScript随机生成数字混合字母的验证码
    用JavaScript写一个简单的倒计时,可以应用在发送短信验证码的“59秒后重新发送验证短信”
    php中curl、fsockopen的应用
    待研究
    做网站用UTF8还是GB2312?
    ECshop 数据库表结构
  • 原文地址:https://www.cnblogs.com/DeltaFish/p/9310693.html
Copyright © 2020-2023  润新知