MyBatis 核心配置综述之 ResultSetHandler

大家好,我是本周的值班编辑 江南一点雨 ,本周将由我为大家排版并送出技术干货,大家可以在公众号后台回复“springboot”,获取最新版 Spring Boot2.1.6 视频教程试看。



我们之前介绍过了MyBatis 四大核心配置之 Executor、StatementHandler、 ParameterHandler,今天本文的主题是介绍一下 MyBatis 最后一个神器也就是 ResultSetHandler。那么开始我们的讨论

ResultSetHandler 简介

回想一下,一条 SQL 的请求过程会经过哪几个步骤?首先会经过 Executor 执行器,它主要负责管理创建 StatementHandler 对象,然后由 StatementHandler 对象做数据库的连接以及生成 Statement 对象,并解析 SQL 参数,由 ParameterHandler 对象负责把 Mapper 方法中的参数映射到 XML 中的 SQL 语句中,那么是不是还少了一个步骤,就能完成一个完整的 SQL 请求了?没错,这最后一步就是 SQL 结果集的处理工作,也就是 ResultSetHandler 的主要工作

要了解 ResultSetHandler 之前,首先需要了解 ResultSetHandler的继承关系以及基本方法

public interface ResultSetHandler {	
  // 处理结果集	
  <E> List<E> handleResultSets(Statement stmt) throws SQLException;	
  // 批量处理结果集	
  <E> Cursor<E> handleCursorResultSets(Statement stmt) throws SQLException;	
  // 处理存储过程的结果集	
  void handleOutputParameters(CallableStatement cs) throws SQLException;	
}

ResultSetHandler是一个接口,它只有一个默认的实现类,像是 ParameterHandler 一样,它的默认实现类是DefaultResultSetHandler

ResultSetHandler 创建

ResultSetHandler 是在处理查询请求的时候由 Configuration 对象负责创建,示例如下

protected BaseStatementHandler(Executor executor, MappedStatement mappedStatement, Object parameterObject, RowBounds rowBounds, ResultHandler resultHandler, BoundSql boundSql) {	
  this.configuration = mappedStatement.getConfiguration();	
  this.executor = executor;	
  this.mappedStatement = mappedStatement;	
  this.rowBounds = rowBounds;	
  this.typeHandlerRegistry = configuration.getTypeHandlerRegistry();	
  this.objectFactory = configuration.getObjectFactory();	
  if (boundSql == null) { // issue #435, get the key before calculating the statement	
    generateKeys(parameterObject);	
    boundSql = mappedStatement.getBoundSql(parameterObject);	
  }	
  this.boundSql = boundSql;	
  // 创建参数处理器	
  this.parameterHandler = configuration.newParameterHandler(mappedStatement, parameterObject, boundSql);	
  // 创建结果映射器	
  this.resultSetHandler = configuration.newResultSetHandler(executor, mappedStatement, rowBounds, parameterHandler, resultHandler, boundSql);	
}	
public ResultSetHandler newResultSetHandler(Executor executor, MappedStatement mappedStatement, RowBounds rowBounds, ParameterHandler parameterHandler,	
      ResultHandler resultHandler, BoundSql boundSql) {	
  // 由 DefaultResultSetHandler 进行初始化	
  ResultSetHandler resultSetHandler = new DefaultResultSetHandler(executor, mappedStatement, parameterHandler, res
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值