Mybatis运行总结
作者:互联网
使用Mybatis的过程实际上是使用SqlSession的过程。SqlSession下有四个对象,同时,Mapper的执行过程也是通过这四个对象。分别是Executor、StatementHandler、ParamenterHandler、ResultHandler。
Executor
执行器,用来调度StatementHandler、ParamenterHandler、ResultHandler来执行对用的SQL。
Mybatis有三种执行器:SIMPLE、REUSE、BATCH。
执行器分类
SIMPLE:简单执行器。不配置时是默认执行器。
REUSE:是一种执行器重用预处理语句。
BATCH:执行器重用语句和批量更新。针对批量专用的执行器。
执行器的使用
根据配置类型确定创建的执行器类型,创建对象后,执行
interceptorChain.pluginAll(executor);
实际上,使用的是Mybatis的插件,构建了一层层的动态代理对象去执行刚刚构建出来的类型执行器。类型执行器的作用是构建对应类型的StatementHandler。
StatementHandler
数据库会话器。处理数据库会话。
数据库会话器分类
SimpleStatementHandler
PreparedStatementHandler
CallableStatementHandler。
数据库会话器的使用
StatementHandler statementHandler=new RoutingStatementHandler(executor,mappedStatement,paramenterObkect,rowBounds,resultHandler,boundSql);
statementHandler =(StatementHandler) interceptorChain.pluginAll(statementHandler);
根据执行器创建的实际上是RoutingStatementHandler。它实现了StatementHandler接口。RoutingStatementHandler根据适配器模式,找到对应类型的StatementHandler。
- StatementHandler的prepare()方法预编译SQL,这个过程需要设置一些基本运行的参数。
- parameterize()方法,启用ParameterHandler设置参数。完成预编译。
- 执行查询或者更新操作。
- 如果是查询操作,执行ResuleSetHandler封装结果给调用者。
ParamenterHandler
参数处理器,对预编译语言进行参数设置。
参数处理器的使用
ParameterHandler是一个接口,有两个抽象方法:getParameterObject(),作用是返回参数对象。setParameters(PerparedStatement ps),作用是设置预编译SQL语句的参数。ParameterHandler有一个实现类:DefaultParamenterHandler。
Mybatis初始化时,注册在Configuration中的typeHandler将对从patameterObject中取出的参数进行参数处理。
ResultSetHandler
结果处理器,组装结果集返回。ResultSetHandler是一个接口。
接口定义
public interface ResultHandler{
<E> List<E> handleResultSets(Statement stmt) throw SQLException;
void handleOutputParamenters(CallableStatement cs) throws SQLException;
}
提供类一个实现类:DefaultResultSetHandler。handleOutputParamenters()处理存储过程中的输出参数;handleResultSets()包装结果集。涉及使用JAVASSIST或者CGLIB进行延迟加载。然后使用typeHandler、ObjectFactory进行组装结果返回。
总运行流程
标签:总结,执行器,ResultHandler,参数,使用,Mybatis,StatementHandler,运行 来源: https://blog.csdn.net/weixin_42212627/article/details/100143618