本篇文章将简单分析Mybatis的StatementHandler源码
首先来看一下StatementHandler接口定义
1 |
|
其中prepare、parameterize、update、query是StatementHandler中比较重要也比较常用的几个方法。StatementHandler的实现类有4个,如下图所示:
BaseStatementHandler
其中抽象类BaseStatementHandler实现了StatementHandler中的部分接口,同时也声明了几个自己的方法,包括setStatementTimeout、setFetchSize、closeStatement,以及生成主键的方法generateKeys。
1 |
|
RoutingStatementHandler
RoutingStatementHandler不提供具体的实现,而是根据StatementType,创建不同的类型StatementHandler。
1 |
|
SimpleStatementHandler
SimpleStatementHandler用于没有预编译参数的SQL的运行。
1 |
|
PreparedStatementHandler
PreparedStatementHandler用于预编译参数SQL的运行。
1 |
|
CallableStatementHandler
CallableStatementHandler用于存储过程的调度。
1 |
|
Executor会通过Configuration对象的newStatementHandler方法生成StatementHandler对象,准确的说是生成它的实现类RoutingStatementHandler对象。然后RoutingStatementHandler根据Executor的类型去创建对应的statementHandler对象。
Configuration的newStatementHandler方法源码:
1 |
|