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进行组装结果返回。

总运行流程

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值