一,以及理解

其实就是一个的工厂连接池,用于生产,因为创建比较笨重,频繁创建会消耗性能,所以有一个工厂连接池来进行管理,创建对象销毁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

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注