【mybatis】mybatis JDBC事务细节

本文详细介绍了mybatis中DQL和DML操作的事务处理。mybatis默认关闭自动提交,DQL操作需确保调用SqlSession.close()来提交或回滚事务,避免事务泄露。DML操作则需显式调用SqlSession.commit(),否则在关闭时会回滚事务。同时,未关闭的连接将在连接池超时后回收。

一、JDBC事务铺垫

    在JDBC事务操作中,conn.commit()和conn.setAutocommit(true)拥有相同的数据库操作效果,都会提交事务持久化对数据库的更改,这一点随便写个JDBC基本操作的demo就能够得到验证。


二、mybatis DQL

    查看mybatis openSession的源码,除非传入boolean autoCommit=true,否则默认都是false。

    因此mybatis的事务机制,无论是查询还是增删改,默认都会执行conn.setAutocommit(false),这句话会导致数据库关闭自动提交和开启事务(基本的JDBC demo已验证);在SqlSession关闭的时候会conn.setAutocommit(true),这里会提交事务。在使用基本的mybatis query的时候,最后是需要关闭SqlSession,如果忘记了这一步,在连接池机制下,会造成事务泄露,也就是说conn没有关闭,但是conn的事务一直没有提交。


三、mybatis DML

    DML也会默认conn.setAutocommit(false),但是mybatis的DML需要显示的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值