您的位置:首页 > 其它

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。

阅读更多
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐