事务工厂创建事务
通过configuration拿到一个执行器传入事务(Transaction)和类型(execType(枚举))
最后返回一个DefaultSqlSession
openSession底层就是做各种成员变量的初始化
例如:configuration,executor,dirty(内存当中的数据与数据库中
factory:SqlSessionFactory:接口
找到他的实现类:DefaultSqlSessionFactory
--->openSession()
public SqlSession openSession() {
return this.openSessionFromDataSource(this.configuration.getDefaultExecutorType(), (TransactionIsolationLevel)null, false);
}
public SqlSession openSession(boolean autoCommit) {
return this.openSessionFromDataSource(this.configuration.getDefaultExecutorType(), (TransactionIsolationLevel)null, autoCommit);
}
dirty=false; 内存中的数据和数据库中一致的。
结论:给DefaultSqlSession的成员变量做了初始化。configuration、执行器,对象的状态(内存中的对象和数据表中的数据一致的状态)
2.session.commit(); 为什么能提交事务
session会话
3.session.close(); 底层为什么可以回滚事务
session.insert()
---->
public int insert(String statement, Object parameter) {
return this.update(statement, parameter);
}
--->update
public int update(String statement, Object parameter) {
this.dirty = true;
MappedStatement e = this.configuration.getMappedStatement(statement);
}
session.close()
this.executor.close(this.isCommitOrRollbackRequired(false));
------>isCommitOrRollbackRequired
private boolean isCommitOrRollbackRequired(boolean force) {
return true || false;
}
------>Executor的close()
public void close(boolean forceRollback) {
this.rollback(forceRollback);//true
}
------>rollback
public void rollback(boolean required) throws SQLException {
if(required) {
this.transaction.rollback();
}
}