Mybatis 中事务提交方式
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 中事务提交方式相关推荐
- Spring中事务提交成功后处理的异步调用方法
为什么80%的码农都做不了架构师?>>> 问题 想要在Spring中提交事务成功后,调用一部分异步方法. 解决 TransactionSynchronizationManage ...
- spring中事务提交后再发MQ消息
本篇博文记录一个小的知识点,在spring框架下的业务代码中同时有数据库操作,有MQ消息发送,怎么控制消息发送在事务提交之后,有问题可及时在本博客下留言,或者在个人博客留言 业务场景: 在一个加了事务 ...
- 【Mybatis 之应用篇】1_Mybatis简介、第一个Mybatis程序和增删改查在Mybatis中的使用方式
文章目录 Mybatis 一.简介 1.持久化 2.持久层 3.为什么需要Mybatis? 二.第一个Mybatis程序 1.创建一个数据库 2.配置pom.xml文件 3.创建实体类 4.创建一个M ...
- EBS Form中数据提交方式(COMMIT)
commit 对 f o rm 和数据库进行提交,如果 form 上面的数据和代码中的数据变动有冲突,最后以 FORM 上的为准. 适用情况:一般来在直接使用 DML 代码修改数据时,就使用 comm ...
- MyBatis中Mapper代理方式
Mapper 的动态代理作用 目前使用sqlsession进行增删改查的缺点: [1]没有办法实现多参数的传递 [2]书写的时候没有接口,后期的维护就比较的低 解决的方案: Mapper的代理方式实现 ...
- 关于java中 get提交方式的乱码问题。
修改Tomcat文件中的conf中的server.xml文件中第65行 添加 URIEncoding="UTF-8" 即可 <Connector connectionTime ...
- MyBatis中设置事务自动提交
MyBatis中设置事务自动提交 MyBatis框架是对JDBC的封装,MyBatis中的事务控制方式其本质也是JDBC的setAutoCommit()方法来设置事务提交的方式的. 1.MyBatis ...
- Mysql中事务是什么?有什么用?
通过这一篇文章让你彻底了解事务,文章当中提供了很多真实示例,供大家参考学习! 目录 一.什么是事务? 二.事务操作 1.没有事务会出现什么场景? 2.控制事务方式一(手动提交) 3.控制事务方式二(通 ...
- Spring的7种事务传播方式
Spring事务传播行为体现在某个service方法调用另一个service方法,事务该如何进行下去. Spring支持7中事务传播方式,在Propagation类中可以看到,如下: REQUIRED ...
- Python Flask-表单提交方式
这篇文章讲两种表单提交方式,先说一下目录树,下图左侧 templates文件夹放置html文件, static文件夹放置css,js文件. 1.请求上下文 首先在templates文件夹新建一个log ...
最新文章
- 【深度学习】在PyTorch中构建高效的自定义数据集
- fermat数推素数无穷_如何在3分钟内对Fermat测试进行素数测试
- 收藏 | 佐治亚理工出品交互式线代教科书!
- ActiveReports 9实战教程(3): 图文并茂的报表形式
- 第一章 微服务网关 - 入门
- node 无脑生成小程序二维码图
- windows 虚拟磁盘的软链接_如何在Windows的操作系统下创建VHD虚拟磁盘
- 【C++】max_element() 和 min_element()
- Javascript特效:响应式改变页面背景颜色
- 近年来,学习图像去雾不得不看的论文和源代码
- 配置中心—Consul配置管理
- Python爬虫案例:爬取携程评论
- 我是一个硬件工程师,面试官随口问了这些问题 | 收藏
- c语言编程题改错题怎么改,c语言编程改错题.doc
- 解决SSH连接不上的问题
- c盘所有的html文件全删,电脑c盘program files(x86)文件夹可以删除吗
- Ls-dyna中的材料加密方法分享
- 不使用yocto搭建 i.MX8QXP Linux 4.14.98_ga 板级开发包编译环境,单步编译
- SAP 自定义登录密码规则
- 自动编解码器的训练与数据识别效果解析
热门文章
- 如何做好软件项目管理工作?
- Win10开启高性能、卓越性能模式的方法
- android 中通过SimpleDateFormat自定义显示英文的时间格式
- 什么叫单模光纤_单模光纤是什么?单模光纤有哪些分类?
- secure IRS aided ISAC
- el-table实现动态表格插入行(开发小记)
- 单片机实验五、外部中断实验
- 六类网线钳能压五类水晶头吗_多功能网线钳的使用方法?“普通网线钳”能压“七类水晶头”吗?...
- 关于推广个人博客的经验_博客推广
- sqlite 多条件查询