mybatis基础流程_SqlSession的引出

SqlSession的引出

我们跟数据库的每一次连接,都需要创建一个会话,我们用openSession()方法来创建

                   

a .  官方源码内提供了多种获取SqlSession的方法. 直接看无参的方法

b . 点击进去.

 

a . 可以看到在内部,不仅创建了sqlSession对象,而是先创建了一个Executor对象(mybatis的执行器,可以负责sql语句的执行和缓存等任务) . 想要获取Executor对象,参数有2个 , 一个是事物Transaction对象,另一个为执行器的类型.

b . 我们会先从Configuration里面拿到Enviroment,Enviroment里面就有事务工厂(</Enviroment>标签内配置事物和数据源) ,如果配置的是JDBC,则会使用Connection对象的commit()、rollback()、close()管理事务。
如果配置成MANAGED,会把事务交给容器来管。如果不存在容器,但是配置成MANAGE不会有任何事务。如 果 是 Spring + MyBatis , 则 没 有 必 要 配 置 , 因 为 我 们 会 直 接 在applicationContext.xml里面配置数据源和事务管理器,覆盖MyBatis的配置

  a . 从上面的截图可以看到, 当没有选择执行器类型的时候,采用默认执行器, 当然这里默认执行器就是SimpleExecutor.

  b . 下面又判断一次是因为开发者怕使用者把默认拦截器设置为空, 所以这里又加了一层判断.从下面的判断可以得出Executor分为3种类型. Simple Batch Reuse

  c . 如果cacheEnabled为true, 证明需要开启二级缓存(二级缓存默认关闭,一级缓存默认打开).那么这里会引入另外一个对象CachingExecutor.来处理缓存.(很明显的装饰者模式)

  d . 最终Executor对象和Configuration对象作为参数,生成了SqlSession对象.

到此,SqlSession对象已经生成.这个对象提供了一些基础的数据库操作,查询等 ,但是一般不直接操作这个对象.因为不是一些基础的增删改查语句的话,会造成硬编码部分过多.

猜你喜欢

转载自www.cnblogs.com/liweibing/p/12736852.html