mybatis-3(sqlSession执行过程)

文章目录

  • 一、SqlSession中的四个重要对象
  • 二、四个对象详解
    • 三种Executor(都提供了查询、更新方法和相关事务方法)
    • 数据库会话器(StatementHandler)
    • 参数处理器
    • 结果处理器
  • 三、过程总括

一、SqlSession中的四个重要对象

  • Executor代表执行器,作用为调度StatementHandler、ParameterHandler、ResultHandler等来执行sql
  • StatementHandler使用数据库的Statement(PreparedStatement)执行操作,是核心对象
  • ParameterHandler用于SQL的参数处理
  • ResultHandler是进行最后数据集(ResultSet)的封装返回处理的

二、四个对象详解

三种Executor(都提供了查询、更新方法和相关事务方法)

  • SIMPLE 简易执行器(默认)
  • REUSE 是一种执行器重用预处理语句
  • BATCH 执行器重用语句和批量更新 它是针对批量专用执行器

数据库会话器(StatementHandler)

  • mybaits首先会创建一个RoutingStatementHandler对象,实现了接口StatementHandler(这里用代理做了封装)。
  • RoutingStatementHandler会通过适配模式找到对应的StatementHandler来执行,其中StatementHandler也会分为
  • 三种分别对应三种执行器:SimpleStatementHandler、PreparedStatementHandler、CallableStatementHandler
  • 数据库会话器定义了一个适配器delegate(StatementHandler接口对象),构造方法来配置适应的StatementHandler对象(给实现类对象使用统一、简单的适配器)

到这里已经大致了解了整个过程

SQL执行过程
Executor通过调用prepare()(实际上是instantiaStatement())对SQL进行了预编译包括一些基础配置,然后Executor调用parameterize()设置参数(通过调用StatementHandler完成),前面全部执行完以后,通过ResultSetHandler对结果进行封装和返回。

参数处理器

前面提到参数处理器(ParamterHandler)对预编译语句设置参数,其中,getParameterObject()返回参数对象,setParameters()方法的作用是设置预编译语句的参数,其中参数还是从parameterObject对象中取参数,然后使用typeHandler来处理,同时typeHandler也是在mybatis初始化的时候注册在Configuration中的。

结果处理器

handleOutputParameters()方法用来处理存储过程中的输出参数的,handlerResultSet()作用是包装结果集。同时mybatis提供了一个DefaultResultSetHandler类(默认是通过这个类来进行处理),因为涉及到JAVASSIST或CGLIB做延迟加载(然后通过typeHandler和ObjectFactory进行组装结果返回),这里不展开解释。

三、过程总括

mybatis-3(sqlSession执行过程)_第1张图片

这里整个过程可以总结为三步:

  1. prepared预编译sql
  2. parameterize设置参数
  3. query/update执行SQL

你可能感兴趣的:(mybatis,Java,mybatis,java)