|
如前文所诉,statementhandler是具体操作jdbc statement执行数据库sql的类
StatementHandler的初始化
跟随Executor,在Executor需要执行数据库操作时新建
- 依赖-Executor,MappedStatement, ResultHandler
- StatementHandler的创建过程如下
//Executor执行数据库操作的方法中创建handler
StatementHandler handler = configuration.newStatementHandler(this, ms, parameter, RowBounds.DEFAULT, null);
//交给RoutingStatmentHandler创建合适的Handler
public StatementHandler newStatementHandler(Executor executor, MappedStatement mappedStatement, Object parameterObject, RowBounds rowBounds, ResultHandler resultHandler) {
StatementHandler statementHandler = new RoutingStatementHandler(executor, mappedStatement, parameterObject, rowBounds, resultHandler);
statementHandler = (StatementHandler) interceptorChain.pluginAll(statementHandler);
return statementHandler;
}
最终根据Mapper中配置的statementType创建出Simple,Prepared,callable中的一种
public RoutingStatementHandler(Executor executor, MappedStatement ms, Object parameter, RowBounds rowBounds, ResultHandler resultHandler) {
switch (ms.getStatementType()) {
case STATEMENT:
delegate = new SimpleStatementHandler(executor, ms, parameter, rowBounds, resultHandler);
break;
case PREPARED:
delegate = new PreparedStatementHandler(executor, ms, parameter, rowBounds, resultHandler);
break;
case CALLABLE:
delegate = new CallableStatementHandler(executor, ms, parameter, rowBounds, resultHandler);
break;
default:
throw new ExecutorException("Unknown statement type: " + ms.getStatementType());
}
}
各种StatmentHandler的分析
- SimpleStatementHandler-简单的jdbc执行操作封装
- PreparedStatementHandler-preparestatement操作封装
- CallableStatementHandler-CallableStatement操作封装
这里需要主要分析下KeyGenerator
为了方便阅读,这部分内容移到
http://blue2048.iyunv.com/admin/blogs/2174274
在Statement中初始化的,还有一些处理输入输出的类对象
- typeHandlerRegistry
- parameterHandler
- resultSetHandler
这部分的内容移到
|
|
|