jdbc的事务自动提交和手动提交,以及mybatis开启自动提交后是否会复用一个连接的验证
2018-07-17 21:24
176 查看
版权声明: https://blog.csdn.net/cdy1996/article/details/81088623
jdbc的sql执行默认是自动提交事务
默认时自动提交,当我手动提交时会报错,不过数据还是会插入到数据库中,因为执行完executeupdate后数据库会自动commit
开启手动提交
手动提交则需要手动调用commit才能提交事务
mybatis未开启自动提交事务
手动提交两次,当然数据库是提交一条才能看到一条,另外可以看到connect是使用的同一个
从源码中可以看到每次执行insert最后调用以下的方法
从prepareStatement可以看到
看到最后可以得到,即如果有的话就会用原来的连接,另外看过源码的同学应该知道,sqlsession创建出来时transaction就会被创建,而connect是由transaction管理的,所以只要用同一个sqlsession,那么connection使用的也是同一个
最后验证当mybatis使用自动提交事务时
可以看到即使使用自动提交事务,connection也是同一个,并会因为自动提交而重新获取connection
最后可以看到,mybatis防止在开启自动提交事务时手动调用commit方法做了判断,防止手动提交会抛出异常
总结
为了提高数据库执行的性能,我们不需要执行一条sql就去创建或者获取一个connection,而是可以重复使用,就像最开始jdbc那里一样,一个connection可以开启多个statement来执行多次,事务也可以分开提交也可以一次提交,且事务的提交不会关闭connection。
阅读更多相关文章推荐
- 使用spring声明式事务,spring使用AOP来支持声明式事务,会根据事务属性,自动在方法调用之前决定是否开启一个事务,并在方法执行之后决定事务提交或回滚事务。
- spring+mybatis 手动开启和提交事务
- spring+mybatis 手动开启和提交事务
- 。getCurrentSession是所有的操作都必须开启一个事务在事务中进行,并且事务提交后,session就会自动关闭,不需要再显示关闭。
- 验证mysql的自动提交事务和手动提交事务(java版)
- Spring与Hibernate的整合,不配置事务管理器,事务会自动提交(Hibernate默认手动提交)
- 关闭SSMS的事务自动提交,改为手动提交
- 定义一个网站全局的 HttpModule ,用来验证客户端是否重复提交数据和是否跨站点提交数据
- JDBC对事务的使用(包括自动提交,回滚等知识)
- JDBC--手动开启Connection事务
- SQL Server 2008开启sa账户以及如何用JDBC进行连接
- asp 不是一个有效的路径。 确定路径名称拼写是否正确,以及是否连接到文件存放的服务
- springmvc mybatis 手动提交事务
- 一个jdbc connection连接对应一个事务
- 关于jdbc事务自动提交
- 制作一个银行卡用户登录页面,提交后连接数据库进行登录验证,根据验证结果跳转到不同页面
- Instance Nine:使用Transaction(事务) 手动提交,自动回滚
- SpringMvc Dao jdbcTemplate设置不自动提交(手动提交)(适用商品抢购等事务)
- Postgresql:9.2.1的默认事务提交模式为手动提交(default)你可以设置称自动提交模式
- 开启sa账户以及如何用JDBC进行连接