mybatis重要组件

mybatis重要组件

  1. Configuration 类是用于管理MyBatis全局配置文件的关系类

    • Environment->DataSource
    • Map mappedStatements
  2. SqlSessionFactory

    • SqlSessionFactory是Session的管理工厂接口,用于开启SqlSession
  3. SqlSession SqlSession中包含了许多面向开发者的调用方法,如selectOne()、selectList()、delete()、update()等方法。

    • SqlSessionTemplate
    • DefaultSqlSession
  4. MappedStatement MappedStatement是Mapper.xml配置文件的封装对象,其中包含SQL语句(SqlSource)、输入参数(ParameterMap)

  5. StatementHandler StatementHandler接口具体操作数据库相关的Handler,提供query()、getBoundSql()等方法。

  6. ResultHandler ResultHandler接口用于操作数据库返回结果。

Executor

  • CachingExecutor
  • BaseExecutor
    • SimpleExecutor

      • 简单执行器,是MyBatis中默认使用的执行器,每执行一次update或select,就开启一个Statement对象,用完就直接关闭Statement对象(可以是Statement或者是PreparedStatment对象)
    • BatchExecutor

      • 批处理执行器,用于将多个SQL一次性输出到数据库
    • ReuseExcutor

      • 可重用执行器,这里的重用指的是重复使用Statement,它会在内部使用一个Map把创建的Statement都缓存起来,每次执行SQL命令的时候,都会去判断是否存在基于该SQL的Statement对象,如果存在Statement对象并且对应的connection还没有关闭的情况下就继续使用之前的Statement对象,并将其缓存起来。因为每一个SqlSession都有一个新的Executor对象,所以我们缓存在ReuseExecutor上的Statement作用域是同一个SqlSession。

      org.mybatis.spring.SqlSessionTemplate#selectList
      org.apache.ibatis.session.defaults.DefaultSqlSessionFactory#openSessionFromDataSource
      //创建Executor和DefaultSqlSession
      org.apache.ibatis.session.Configuration#newExecutor

StatementHandler

  • RoutingStatementHandler
  • BaseStatementHandler
    • 它本身是一个抽象类,用于简化StatementHandler 接口实现的难度,属于适配器设计模式体现,它主要有三个实现类:
    • SimpleStatementHandler
      • java.sql.Statement对象创建处理器,管理 Statement 对象并向数据库中推送不需要预编译的SQL语句。
    • PreparedStatementHandler
      • java.sql.PrepareStatement对象的创建处理器,管理Statement对象并向数据中推送需要预编译的SQL语句。
    • CallableStatementHandler
      • java.sql.CallableStatement对象的创建处理器,管理 Statement 对象并调用数据库中的存储过程。

在创建 SimpleStatementHandler PreparedStatementHandler CallableStatementHandler调用父类构造方法 BaseStatementHandler 创建了 ParameterHandler ResultSetHandler

protected BaseStatementHandler(Executor executor, MappedStatement mappedStatement, Object parameterObject, RowBounds rowBounds, ResultHandler resultHandler, BoundSql boundSql){
    // ....
    //构建parameterHandler
    this.parameterHandler = configuration.newParameterHandler(mappedStatement, parameterObject, boundSql);
    //构建resultSetHandler
    this.resultSetHandler = configuration.newResultSetHandler(executor, mappedStatement, rowBounds, parameterHandler, resultHandler, boundSql);

}

你可能感兴趣的:(mybatis重要组件)