SSM-MyBatis-06:Mybatis中openSession到底做了什么
------------吾亦无他,唯手熟尔,谦卑若愚,好学若饥-------------
1.找SqlSesionFactory实现类
Ctrl+H:DefaultSqlSessionFactory:
Ctrl+F :openSession()方法
原型如下:
public SqlSession openSession() {
return this.openSessionFromDataSource(this.configuration.getDefaultExecutorType(), (TransactionIsolationLevel)null, false);
}
2.查看openSessionFromDataSource方法的实现
private SqlSession openSessionFromDataSource(ExecutorType execType, TransactionIsolationLevel level, boolean autoCommit) {
Transaction tx = null; 定义事务对象
很明显:SqlSession实现类
DefaultSqlSession var8;
try {
//读取 MyBatis-Config.xml 形成 Environment对象
Environment e = this.configuration.getEnvironment();
//通过环境e作为入参,获取到事务工厂
TransactionFactory transactionFactory = this.getTransactionFactoryFromEnvironment(e);
//创建事务对象
tx = transactionFactory.newTransaction(e.getDataSource(), level, autoCommit);
//MyBatis执行器 Executor 执行器
Executor executor = this.configuration.newExecutor(tx, execType);
var8 = new DefaultSqlSession(this.configuration, executor, autoCommit);
} catch (Exception var12) {
this.closeTransaction(tx);
throw ExceptionFactory.wrapException("Error opening session. Cause: " + var12, var12);
} finally {
ErrorContext.instance().reset();
}
return var8;
}
3.查看DefaultSqlSession方法的实现
private Configuration configuration; //配置
private Executor executor; //执行器
private boolean autoCommit; //事务自动提交的
private boolean dirty; //脏 Java 内存中泛型数据 和底层DB数据 不一样 干净的(Java内存===DB Data 一致的)
private List<Cursor<?>> cursorList; 游标 让记录前进的一个工具
public DefaultSqlSession(Configuration configuration, Executor executor, boolean autoCommit) {
this.configuration = configuration;
this.executor = executor;
this.dirty = false; //干净的
this.autoCommit = autoCommit;
}
结论:通过以上3个步骤,我们不难发现,openSession 就是对DefaultSqlSession类中的成员变量赋值
- SSM-MyBatis-07:Mybatis中SqlSession的insert和delete底层到底做了什么
- SqlSession中的OpenSession到底做了什么?
- SSM(Spring、SpringMVC、MyBatis)各有什么作用?
- SSM框架day02-MyBatis——046——关联查询-one2one-共享主键解决方案、047、048关联查询-什么是自关联、one2many-多表连接查询
- openSession()到底做了什么
- SSM-MyBatis-17:Mybatis中一级缓存(主要是一级缓存存在性的证明,增删改对一级缓存会造成什么影响)
- sqlsession中的opensession到底做了什么
- java SSM 框架 微信自定义菜单 快递接口 SpringMVC mybatis redis shiro ehcache websocket
- OpenStack系列讲座2:以公司实际应用讲解OpenStack到底是什么(入门篇)
- 到底什么是权限?我们应该如何正确理解“权限定义”(请高手指点)
- Union和Union All到底有什么区别
- 到底什么才是好的API设计?
- 学c语言到底有什么用?为您诠释!
- 我们到底需要的是什么?
- Union和Union All到底有什么区别
- 关注需求,我们到底需要关注什么?
- 用户到底想要什么?为什么要用这个产品? 3ff8
- SSM框架Web程序的流程(Spring SpringMVC Mybatis)
- Java中字符流和字节流到底有什么区别!!!