一,以及理解
其实就是一个的工厂连接池,用于生产,因为创建比较笨重,频繁创建会消耗性能,所以有一个工厂连接池来进行管理,创建对象销毁session,操作数据库的一大对象,lder是用于创建,是单例的,在中的话,是交给来管理的。
二,lder
方法基本都是创建
n:创建一个lder,然后执行的时候创建的时候,就是使用的lder里面的build
所以lder的生命周期就是创建完基本的使命就结束了,一般不会在使用到了,所以说也可以认为是单例的,伴随着整个的是的生命周期
三,生命周期
的生命周期存在整个 的应用中,创建了 ,基本都在使用,而且还是单例的,一直在的生命周期中,知道结束,才进行销毁。
创建过程是交给来管理的,是一个单例的对象,所以在整个生命周期也是一直存在,而且只是有一个的,是一直生产对象的
四,生命周期创建
创建过程都是从一个开始,也就是从请求调用开始的,就是进入的反射的语句中,进行组装sql,执行语句,有一点需要注意下,此时的一直是,而且使用的还是代理调用,所以具体要看tion
此时调用的是的方法
此时使用的是代理的的类r
this. = ()Proxy.(.class.(), new Class[]{.class}, new r());
此时是创建的地方,可以看到每一个过来都是执行创建一个,和事物是有关系 的,同一个事物是还是使用原来的
以下都是创建的具体过程
此时会有事物的判断以及事物中的中的注册,下面会具体分析这一点的
和事物简介(事物分析)
获取,用于在
中保持当前的。
org.mybatis.spring.SqlSessionUtils#getSqlSession(org.apache.ibatis.session.SqlSessionFactory, org.apache.ibatis.session.ExecutorType, org.springframework.dao.support.PersistenceExceptionTranslator)
//获取SqlSessionHolder
SqlSessionHolder holder = (SqlSessionHolder) TransactionSynchronizationManager.getResource(sessionFactory);
//获取事物级别的SqlSession
SqlSession session = sessionHolder(executorType, holder);
if (session != null) {
return session;
}
LOGGER.debug(() -> "Creating a new SqlSession");
//新建sqlSession
session = sessionFactory.openSession(executorType);
//注册到事物级别中
registerSessionHolder(sessionFactory, executorType, exceptionTranslator, session);
进去看一下, 或许又看到了熟悉的,说到这里估计应该差不多可以猜测到多条sql执行的时候,同一个事物怎么控制就基本知道的差不多了,还有最后要也是必须要做的
继承t,用于的事务管理
关闭
关闭的时候,判断是否存在以及当前的是否和里面的一致,一致的话销毁session,是的话则进行,否的话则进行关闭当前的回话,结束本次调用
生命周期总结:
一般的话,一个会话或者一个方法的执行就是一个的生命周期,也可以理解为一次查询或者一次更新从开始到执行完毕数据,就关闭销毁了,但是有事物的话,在一个事物中的都是同一个
限时特惠:本站持续每日更新海量各大内部创业课程,一年会员仅需要98元,全站资源免费下载
点击查看详情
站长微信:Jiucxh