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

@Test
public void testSaveUser() throws Exception {
User user = new User();
user.setUsername("mybatis user09");
//6.执行操作
int res = userDao.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 的代理对象
userDao = session.getMapper(IUserDao.class);
}
@After//在测试方法执行完成之后执行
public void destroy() throws Exception{
//7.提交事务
session.commit();
//8.释放资源
session.close();
in.close();
}

观察在它在控制台输出的结果:

Opening JDBC Connection
Created connection 982007015
Setting autocommit to false on JDBC Connection[com.mysql.jdbc.JDBC4Connection@3a883ce7]
Committing JDBC Connection[com.mysql.jdbc.JDBC4Connection@3a883ce7]

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

Mybatis 自动提交事务的设置
通过上面的研究和分析,现在我们一起思考,为什么 CUD 过程中必须使用 sqlSession.commit()提交事 务?主要原因就是在连接池中取出的连接,都会将调用 connection.setAutoCommit(false)方法,这样我们 就必须使用 sqlSession.commit()方法,相当于使用了 JDBC 中的 connection.commit()方法实现事务提交。
明白这一点后,我们现在一起尝试不进行手动提交,一样实现 CUD 操作。

@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(true);
//5.创建 Dao 的代理对象
userDao = session.getMapper(IUserDao.class);
}
@After//在测试方法执行完成之后执行
public void destroy() throws Exception{
//7.释放资源
session.close();
in.close();
}
所对应的 DefaultSqlSessionFactory 类的源代码:
@Override
public SqlSession openSession(Boolean autoCommit){
retuen openSessionFromDataSource(configuration.getDefaultExecutorType(), null, autoCommit);}

Mybatis 中事务提交方式相关推荐

  1. Spring中事务提交成功后处理的异步调用方法

    为什么80%的码农都做不了架构师?>>>    问题 想要在Spring中提交事务成功后,调用一部分异步方法. 解决 TransactionSynchronizationManage ...

  2. spring中事务提交后再发MQ消息

    本篇博文记录一个小的知识点,在spring框架下的业务代码中同时有数据库操作,有MQ消息发送,怎么控制消息发送在事务提交之后,有问题可及时在本博客下留言,或者在个人博客留言 业务场景: 在一个加了事务 ...

  3. 【Mybatis 之应用篇】1_Mybatis简介、第一个Mybatis程序和增删改查在Mybatis中的使用方式

    文章目录 Mybatis 一.简介 1.持久化 2.持久层 3.为什么需要Mybatis? 二.第一个Mybatis程序 1.创建一个数据库 2.配置pom.xml文件 3.创建实体类 4.创建一个M ...

  4. EBS Form中数据提交方式(COMMIT)

    commit 对 f o rm 和数据库进行提交,如果 form 上面的数据和代码中的数据变动有冲突,最后以 FORM 上的为准. 适用情况:一般来在直接使用 DML 代码修改数据时,就使用 comm ...

  5. MyBatis中Mapper代理方式

    Mapper 的动态代理作用 目前使用sqlsession进行增删改查的缺点: [1]没有办法实现多参数的传递 [2]书写的时候没有接口,后期的维护就比较的低 解决的方案: Mapper的代理方式实现 ...

  6. 关于java中 get提交方式的乱码问题。

    修改Tomcat文件中的conf中的server.xml文件中第65行 添加 URIEncoding="UTF-8" 即可 <Connector connectionTime ...

  7. MyBatis中设置事务自动提交

    MyBatis中设置事务自动提交 MyBatis框架是对JDBC的封装,MyBatis中的事务控制方式其本质也是JDBC的setAutoCommit()方法来设置事务提交的方式的. 1.MyBatis ...

  8. Mysql中事务是什么?有什么用?

    通过这一篇文章让你彻底了解事务,文章当中提供了很多真实示例,供大家参考学习! 目录 一.什么是事务? 二.事务操作 1.没有事务会出现什么场景? 2.控制事务方式一(手动提交) 3.控制事务方式二(通 ...

  9. Spring的7种事务传播方式

    Spring事务传播行为体现在某个service方法调用另一个service方法,事务该如何进行下去. Spring支持7中事务传播方式,在Propagation类中可以看到,如下: REQUIRED ...

  10. Python Flask-表单提交方式

    这篇文章讲两种表单提交方式,先说一下目录树,下图左侧 templates文件夹放置html文件, static文件夹放置css,js文件. 1.请求上下文 首先在templates文件夹新建一个log ...

最新文章

  1. 【深度学习】在PyTorch中构建高效的自定义数据集
  2. fermat数推素数无穷_如何在3分钟内对Fermat测试进行素数测试
  3. 收藏 | 佐治亚理工出品交互式线代教科书!
  4. ActiveReports 9实战教程(3): 图文并茂的报表形式
  5. 第一章 微服务网关 - 入门
  6. node 无脑生成小程序二维码图
  7. windows 虚拟磁盘的软链接_如何在Windows的操作系统下创建VHD虚拟磁盘
  8. 【C++】max_element() 和 min_element()
  9. Javascript特效:响应式改变页面背景颜色
  10. 近年来,学习图像去雾不得不看的论文和源代码
  11. 配置中心—Consul配置管理
  12. Python爬虫案例:爬取携程评论
  13. 我是一个硬件工程师,面试官随口问了这些问题 | 收藏
  14. c语言编程题改错题怎么改,c语言编程改错题.doc
  15. 解决SSH连接不上的问题
  16. c盘所有的html文件全删,电脑c盘program files(x86)文件夹可以删除吗
  17. Ls-dyna中的材料加密方法分享
  18. 不使用yocto搭建 i.MX8QXP Linux 4.14.98_ga 板级开发包编译环境,单步编译
  19. SAP 自定义登录密码规则
  20. 自动编解码器的训练与数据识别效果解析

热门文章

  1. 如何做好软件项目管理工作?
  2. Win10开启高性能、卓越性能模式的方法
  3. android 中通过SimpleDateFormat自定义显示英文的时间格式
  4. 什么叫单模光纤_单模光纤是什么?单模光纤有哪些分类?
  5. secure IRS aided ISAC
  6. el-table实现动态表格插入行(开发小记)
  7. 单片机实验五、外部中断实验
  8. 六类网线钳能压五类水晶头吗_多功能网线钳的使用方法?“普通网线钳”能压“七类水晶头”吗?...
  9. 关于推广个人博客的经验_博客推广
  10. sqlite 多条件查询