mybatis-3(sqlSession执行过程)

一、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进行组装结果返回),这里不展开解释。

三、过程总括

在这里插入图片描述

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

  1. prepared预编译sql
  2. parameterize设置参数
  3. query/update执行SQL
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值