其他分享
首页 > 其他分享> > Mybatis运行总结

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。

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