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的实现。。。。。。
领取专属 10元无门槛券
私享最新 技术干货