【MyBatis】基础篇(九) MyBatis的事务控制

MyBatis·基础篇(九) MyBatis的事务控制


1. JDBC中事务的回顾

在 JDBC 中我们可以通过手动方式将事务的提交改为手动方式,通过 setAutoCommit()方法就可以调整。
在这里插入图片描述
那么我们的 Mybatis 框架因为是对 JDBC 的封装,所以 Mybatis 框架的事务控制方式,本身也是用 JDBC 的setAutoCommit()方法来设置事务提交方式的。

2. 配置事务管理器

修改 SqlMapConfig.xml

<!-- 配置事务的类型 -->
<transactionManager type="JDBC"></transactionManager>

支持两种类型:
* JDBC:使用JDBC的事务管理机制:即利用java.sql.Connection对象完成对事务的提交(commit())、回滚(rollback())、关闭(close())等
* MANAGED:使用MANAGED的事务管理机制:这种机制MyBatis自身不会去实现事务管理,而是让程序的WEB容器如(JBOSS,Weblogic)来实现对事务的管理

3. Mybatis 中事务提交方式

Mybatis 中事务的提交方式,本质上就是调用 JDBC 的 setAutoCommit()来实现事务控制。
运行之前源码:

/**
 * @author: LzCc
 * @blog: https://blog.csdn.net/qq_41744145
 * @description: 测试类
 */
public class Test {
    private InputStream in;
    private SqlSessionFactory factory;
    private SqlSession session;
    private UserMapper userMapper;
    public void testSaveUser() throws Exception {
        User user = new User();
        user.setUsername("周杰伦");
        //6.执行操作
        int res = userMapper.saveUser(user);
        System.out.println(res);
        System.out.println(user.getId());
    }
    @Before//在测试方法执行之前执行
    public void init()throws Exception {
        //1.读取配置文件
        in = Resources.getResourceAsStream("SqlMapConfig.xml");
        //2.创建构建者对象
        SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
        //3.创建 SqlSession 工厂对象
        factory = builder.build(in);
        //4.创建 SqlSession 对象
        session = factory.openSession();
        //5.创建 Dao 的代理对象
        userMapper = session.getMapper(UserMapper.class);
    }
    @After//在测试方法执行完成之后执行
    public void destroy() throws Exception{
        //7.提交事务
        session.commit();
        //8.释放资源
        session.close();
        in.close();
    }
}

观察控制台输出的结果:
在这里插入图片描述

打开JDBC连接
创建连接对象
设置自动事务为 false 到JDBC连接

在这里插入图片描述

提交事务
重新设置自动提交事务
关闭JDBC连接
归还连接池

这是我们的 Connection 的整个变化过程,通过分析我们能够发现之前的 CUD 操作过程中,我们都要手动进行事务的提交,原因是 setAutoCommit()方法,在执行时它的值被设置为 false 了,所以我们在 CUD 操作中,必须通过 sqlSession.commit()方法来执行提交操作。

4. MyBatis 设置自动提交事务

通过上面我们知道,从连接池取出连接时都会将自动事务设置为 false ,这样我们就必须使用 sqlSession.commit() 方法,相当于使用了 JDBC 中的 connection.commit() 方法实现事务提交。

那么我们如何设置自动提交事务呢?

//4.创建 SqlSession 对象
session = factory.openSession(true);

在这里插入图片描述

我们只需要在调用 openSession 方式时传入参数 true

再次运行测试类,控制台输出如下:
在这里插入图片描述
在数据库获取连接时并没有设置自动事务为 false 了
在这里插入图片描述
也没有显示提交事务,因为事务自动提交了

简单了解下Mybatis中的事务控制,今后在项目中都会整合Spring,通过Spring框架来管理事务

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值