Mybatis之Executor简析

executor

Executor执行器,SqlSession执行的数据库脚本都是通过Executor这个接口完成的,SqlSession会持有一个Executor的实例。

先看下SqlSession的selectList方法,会调用executor的query方法

public List selectList(String statement, Object parameter, RowBounds rowBounds) {

MappedStatement ms = configuration.getMappedStatement(statement);

return executor.query(ms, wrapCollection(parameter), rowBounds, Executor.NO_RESULT_HANDLER);

}

下面就看看Executor接口,这个接口的update接口处理增删改,query执行查的操作。下图是所有的方法:

executor

Executor的所有实现类如下图所示,有SimpleExecutor、 BatchExecutor、ReuseExecutor和CachingExecutor。

ReuseExecutor:就是Statement可以重用的执行器,用map保存sql和Statement,作了一次缓存

BatchExecutor:批量操作执行器,如果是增删改的时候,commit的时候再执行数据库的操作。

SimpleExecutor:简单的执行器,

executor实现类

看下executor中的update方法实际上调用的BaseExecutor的doUpdate方法,看下方法的执行细节。

获取Configuration,再从Configuration中获取StatementHandler,最终会调用handler的update方法。

public int doUpdate(MappedStatement ms, Object parameter) throws SQLException {

Statement stmt = null;

try {

Configuration configuration = ms.getConfiguration();

StatementHandler handler = configuration.newStatementHandler(this, ms, parameter, RowBounds.DEFAULT, null, null);

stmt = prepareStatement(handler, ms.getStatementLog());

return handler.update(stmt);

} finally {

closeStatement(stmt);

}

}

其他查询方法也是调用StatementHandler对应的方法。

下一文简析StatementHandler的实现。。。。。。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20200219A0QBKP00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券