MyBatis3.x 的事务管理形式
在核心配置文件中的transactionManager标签
配置事务管理方式,有两种方式:
1、JDBC
的事务管理<transactionManager type="JDBC"/>
:使⽤ java.sql.Connection对象完成对事务的提交(commit())、回滚(rollback())、关闭(close())
2、MANAGED
的事务管理<transactionManager type="MANAGED"/>
:MyBatis⾃身不会去实现事务管理,而让程序的容器如(Spring,JBOSS)来实现对事务的管理
如果不是web程序,然后使⽤的事务管理形式是MANAGED, 那么将没有事务管理功能
事务工长:
JdbcTransactionFactory实现类->JdbcTransaction
ManagedTransactionFactory实现类->ManagedTransaction(rollback和commit源码函数内为空)
Mysql的Innodb和MyISAM引擎的区别
面试注意
区别项 | Innodb | myisam |
---|---|---|
事务 | ⽀持 | 不⽀持 |
锁粒度 | ⾏锁,适合⾼并发 | 表锁,不适合⾼并发 |
是否默认 | 默认 | ⾮默认 |
⽀持外键 | ⽀持 | 不⽀持 |
适合场景 | 读写均衡,写⼤于读场景,需要事务 | 读多写少场景,不需要事务 |
全⽂索引 | 可以通过插件实现, 更多使⽤ElasticSearch | ⽀持全⽂索引 |
MyISAM不⽀持事务,如果需要事务则改为innodb引擎,更改数据库的表里面的引擎
mybatis事务控制
使用innodb引擎时使用sqlSessionFactory.openSession()
设置是否自动提交:
//false是非自动提交, true是自动提交事务,默认是
SqlSession sqlSession = sqlSessionFactory.openSession(false);
//获取Session
try{
VideoMapper videoMapper = sqlSession.getMapper(VideoMapper.class);
Video video1 = new Video();
video1.setTitle("微服务架构");
videoMapper.add(video1);
sqlSession.commit(); //如果没有自动提交,必须手动加sqlSession.commit()
}catch (Exception e){
e.printStackTrace();
sqlSession.rollback();
}
sqlSession.close();