jdbc的事务自动提交和手动提交,以及mybatis开启自动提交后是否会复用一个连接的验证

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。

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值