首先jdbc是如何操作事务的?
是通过连接进行设置,默认是自动提交
try{
con.setAutoCommit(false);//开启事务
......
con.commit();//try的最后提交事务
} catch() {
con.rollback();//回滚事务
}
mybatis使用的session是如何进行操作连接操作事务的
每个sqlsession是一个数据库会话,sqlsession是线程不安全的,多线程访问同一sqlsession对象会出现线程安全问题。
mybatis源码解析
InputStream inputStream = null;
inputStream = Resources.getResourceAsStream("mybatis.xml");
SqlSessionFactory sqlSessionFactory= new SqlSessionFactoryBuilder().build(inputStream);
sqlSession =sqlSessionFactory.openSession();
courseDaoMapper = sqlSession.getMapper(CourseDaoMapper.class);
分析SqlsessionFactory,是个接口,查下看实现类
进入DefaultSqlSessionFactory
查看Transaction 接口类
进入JdbcTransaction类
该类的大概功能是:负责获取连接、设置是否进行自动提交作用
查看该类的方法
关于增删改的操作,获取connection是在执行sqlsession的增删改操作的时候才打开连接
DefaultSqlSession的更新方法,调用了Executor的uptate方法
Executo