问题
今天复习一下mybatis,看到别人说事务自己也去了解一下
他们都说mybatis增删改需要手动提交事务
???
我看了一下自己的代码?我没有写提交啊?但是我的测试结果?和数据库查看结果都是成功的?有写入到数据库啊!!!
那为什么到我这里不需要提交事务?好奇的我想要去了解
猜想1
既然数据库需要手动提交事务,那肯定有自动提交事务
难道是我在这里被设置为自动提交事务了?
马上查看代码
private static SqlSessionFactory sqlSessionFactory;
static {
try{
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
}catch(Exception e){
e.printStackTrace();
}
}
public static SqlSession getSqlSEssion(){
return sqlSessionFactory.openSession();
}
查看源码,openSession() 不加true的话就是默认吧autocommit设置为false
那没问题啊!
查看日志:日志也说明了自动提交事务是没有开的
此猜想错了
猜想2
mybatis需要提交事务的原因是:
- 它在创建sqlsession的时候会手动开启事务
- 并在结束后自动回滚事务
所以,如果你不提交事务,那么增删改的操作都是无效的
难道是在这里出现了问题,但是在日志中也说明,jdbc的事务代码是有自动回滚的
其实答案已经很接近了,问题确实是出现在这个步骤,但是并不是出现在代码中,而是出现在数据库上
原因
- 根本原因是出现在开启事务上
- 它根本没有开启事务
- 应该说他不能开启事务
- 因为数据库使用的是myisam引擎,因为它不支持事务,所以根本就没有开启事务这个功能
引擎
mysql有几种引擎
- InnoDB 支持事务、行级锁,
- MyISAM都不支持
来源:oschina
链接:https://my.oschina.net/u/4389804/blog/4498760