Mybatis框架,使用 JDBC
进行事务管理时,意味着将事务交给jdbc管理。
使用 JDBC 管理事务时,一般需要在代码里设置开启事务:
sqlSessionFactory.openSession()
,底层实际上执行的是 conn.setAutComit(false)
。JDBC
开启事务时,一般也需要手动设置事务的提交sqlSession.commit()
。这样你提交的sql语句在经过JDBC管理后,才会真正的提交给数据库执行。sqlSessionFactory.openSession()
,一定不要忘了设置手动提交:sqlSession.commit()
。
这样,你代码里的sql才会被JDBC 提交给数据库去执行。否则,你开启了事务管理,没有提交的操作,你的代码sql就不会被JDBC提交给数据库,也就造成你代码里每次的要执行的sql并没有被数据库真正执行。
通俗讲,你的 insert into user (userId,userName) values ("001","用户名称")
这个sql不会被数据库执行,你的这个插入操作不会有数据新增。如果使用 JDBC 管理事务时,不手动设置事务管理——这里用另一种说法就是JDBC不开启事务管理,重点是事务管理,它是使用默认的事务管理机制。
conn.setAutComit(true)
。事务管理
这一说法。conn.setAutComit(false)
代码。conn.setAutComit(true)
代码。sqlSession.commit()
。那么问题来了,为什么要开启事务管理?采用默认的事务机制不好吗,sql代码自动提交给数据库执行,也不需要所谓的事务管理这一操作。
为什么一般都建议,使用mybatis框架时要在代码里修改成开启事务管理?使用场景是什么,或者说这么干的目的是啥?