测试Mybatis时事务自动回滚,无法完成增删改
生活随笔
收集整理的這篇文章主要介紹了
测试Mybatis时事务自动回滚,无法完成增删改
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
場景
單獨使用myBatis進行測試時,進行增刪改查,進行查詢時正常顯示,但是進行插入、修改、刪除時數據庫中總是沒法修改,查看控制臺輸出:
原因
默認情況下,事務不是自動提交
查看Mybatis的opensession()源碼
可以看到有好多重載方法,其中帶參數 paramBoolean 是boolean類型的,此參數默認為false,是不會自動提交事務。
工具類
查看opensession()所在的工具類SqlSessionFactoryUtils.java
import java.io.IOException; import java.io.InputStream;import org.apache.ibatis.datasource.pooled.PooledDataSource; import org.apache.ibatis.io.Resources; import org.apache.ibatis.mapping.Environment; import org.apache.ibatis.session.Configuration; import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSessionFactory; import org.apache.ibatis.session.SqlSessionFactoryBuilder; import org.apache.ibatis.transaction.TransactionFactory; import org.apache.ibatis.transaction.jdbc.JdbcTransactionFactory;import com.learn.ssm.chapter3.mapper.RoleMapper; import com.learn.ssm.chapter3.mapper.RoleMapper2; import com.learn.ssm.chapter3.pojo.Role;public class SqlSessionFactoryUtils {private final static Class<SqlSessionFactoryUtils> LOCK = SqlSessionFactoryUtils.class;private static SqlSessionFactory sqlSessionFactory = null;private SqlSessionFactoryUtils() {}public static SqlSessionFactory getSqlSessionFactory() {synchronized (LOCK) {if (sqlSessionFactory != null) {return sqlSessionFactory;}String resource = "mybatis-config.xml";InputStream inputStream;try {inputStream = Resources.getResourceAsStream(resource);sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);} catch (IOException e) {e.printStackTrace();return null;}return sqlSessionFactory;}}public static SqlSession openSqlSession() {if (sqlSessionFactory == null) {getSqlSessionFactory();}return sqlSessionFactory.openSession();} }可以看到是沒有傳遞參數的,所以默認是不會自動提交事務的。
解決
將工具類中的opensession()方法中傳遞參數true,使其自動提交。
再次執行插入后就會提示:
?
然后查看數據庫就已經插入數據了。
總結
以上是生活随笔為你收集整理的测试Mybatis时事务自动回滚,无法完成增删改的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Vue实现访问百度音乐API实现播放音乐
- 下一篇: mybatis针对mysql自增主键怎样