zoukankan      html  css  js  c++  java
  • 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对象.

      e . SimpleExecutor : 简单执行器,每一次update或者select,都会产生一个新的statemen,用完直接关闭statement对象,用完直接关闭(也可以是preparedStatemnt)

           ReuseExecutor : 可重用执行器, 这里指的重用是statement的重用,使用map装起来

        BatchExecutor : 批量执行器 , (JDBC批量不支持select) ,执行update的时候,将所有的sql语句一次性推送,等待统一执行.  (这里认为 update ,add ,delete 都叫做update)

     

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

    人总得做点什么 ,不是么
  • 相关阅读:
    HDU 4611 Balls Rearrangement 数学
    Educational Codeforces Round 11 D. Number of Parallelograms 暴力
    Knockout.Js官网学习(简介)
    Entity Framework 关系约束配置
    Entity Framework Fluent API
    Entity Framework DataAnnotations
    Entity Framework 系统约定配置
    Entity Framework 自动生成CodeFirst代码
    Entity Framework CodeFirst数据迁移
    Entity Framework CodeFirst尝试
  • 原文地址:https://www.cnblogs.com/liweibing/p/12736852.html
Copyright © 2011-2022 走看看