一、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需要显示的

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

被折叠的 条评论
为什么被折叠?



