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进行组装结果返回),这里不展开解释。
三、过程总括
这里整个过程可以总结为三步:
- prepared预编译sql
- parameterize设置参数
- query/update执行SQL