mybatis执行流程

目录

一、mybatis执行流程

二、Mybatis层次结构

三、Mybatis组件介绍


一、mybatis执行流程

1. 加载配置文件并初始化(SqlSession)

配置文件来源于两个地方,一个是配置文件(主配置文件conf.xml,mapper文件*.xml),一个是java代码中的注释,将sql的配置信息加载成为一个mappedstatement对象,存储在内存之中(包括传入参数的映射配置,结果映射配置,执行的sql语句)。

2. 接收调用请求

调用mybatis提供的api,传入的参数为sql的id(有namespase和具体sql的id组成)和sql语句的参数对象,mybatis将调用请求交给请求处理层。

3. 处理请求

根据sql的id找到对应的mappedstatament对象。

根据传入参数解析mappedstatement对象,得到最终要执行的sql。

获取数据库连接,执行sql,得到执行结果

Mappedstatement对象中的结果映射对执行结果进行转换处理,并得到最终的处理结果。

释放连接资源

4. 返回处理结果

二、Mybatis层次结构

mybatis执行流程_第1张图片

三、Mybatis组件介绍

MyBatis的主要成员

  • Configuration        MyBatis所有的配置信息都保存在Configuration对象之中,配置文件中的大部分配置都会存储到该类中
  • SqlSession            作为MyBatis工作的主要顶层API,表示和数据库交互时的会话,完成必要数据库增删改查功能
    SqlSession是一个接口,它有两个实现类:DefaultSqlSession(默认)和SqlSessionManager(弃用,不做介绍)
    SqlSession是MyBatis中用于和数据库交互的顶层类,通常将它与ThreadLocal绑定,一个会话使用一个SqlSession,并且在使用完毕后需要close
    SqlSession中的两个最重要的参数,configuration与初始化时的相同,Executor为执行器

     

  • Executor               MyBatis执行器,是MyBatis 调度的核心,负责SQL语句的生成和查询缓存的维护
    Executor也是一个接口,他有三个常用的实现类BatchExecutor(重用语句并执行批量更新),
    ReuseExecutor(重用预处理语句prepared statements),SimpleExecutor(普通的执行器,默认)。

     

  • StatementHandler 封装了JDBC Statement操作,负责对JDBC statement 的操作,如设置参数等
  • ParameterHandler  负责对用户传递的参数转换成JDBC Statement 所对应的数据类型
  • ResultSetHandler   负责将JDBC返回的ResultSet结果集对象转换成List类型的集合
  • TypeHandler          负责java数据类型和jdbc数据类型(也可以说是数据表列类型)之间的映射和转换
  • MappedStatement  MappedStatement维护一条节点的封装
    作用: MappedStatement与Mapper配置文件中的一个select/update/insert/delete节点相对应。mapper中配置的标签都被封装到了此对象中,主要用途是描述一条SQL语句。
    **初始化过程:**回顾刚开始介绍的加载配置文件的过程中,
    会对mybatis-config.xml中的各个标签都进行解析,
    其中有 mappers标签用来引入mapper.xml文件或者配置mapper接口的目录
     
    这样的一个select标签会在初始化配置文件时被解析封装成一个MappedStatement对象,
    然后存储在Configuration对象的mappedStatements属性中,
    mappedStatements 是一个HashMap,
    存储时key = 全限定类名 + 方法名,value = 对应的MappedStatement对象。

     

  • SqlSource              负责根据用户传递的parameterObject,动态地生成SQL语句,将信息封装到BoundSql对象中,并返回
  • BoundSql              表示动态生成的SQL语句以及相应的参数信息

以上主要成员在一次数据库操作中基本都会涉及,在SQL操作中重点需要关注的是SQL参数什么时候被设置和结果集怎么转换为JavaBean对象的,这两个过程正好对应StatementHandler和ResultSetHandler类中的处理逻辑。

 

你可能感兴趣的:(mybatis执行流程)