美文网首页
mybatis重要组件

mybatis重要组件

作者: 7ee4c95bcc68 | 来源:发表于2020-09-24 16:24 被阅读0次

    mybatis重要组件

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

      • Environment->DataSource
      • Map<String, MappedStatement> 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重要组件

          本文链接:https://www.haomeiwen.com/subject/jhftuktx.html