StatementHandler

在MyBatis中,sql

  • Configuration对象会采用new RoutingStatementHandler()来生成StatementHandler对象,
    • 换句话说咱们真正使用的是RoutingStatementHandler对象,
    • 而后它会根据Executor的类型去建立对应具体的statementHandler对象
      • SimpleStatementHandlerPreparedStatementHandlerCallableStatementHandler)。

而后利用具体statementHandler的方法完成所须要的功能。插件

  • 那么这个具体的statementHandler是保存在RoutingStatementHandler对象的delegate属性的,
  • 因此当咱们拦截statementHandler的时候就要经常访问它了。它们的关系以下图所示。

StatementHandler是MyBatis四大对象里面最重要的对象,它的方法是十分重要的,也是咱们插件的基础。对象

  • 当咱们须要改变sql的时候,
    • 显然咱们要在预编译SQL(prepare方法前加入修改的逻辑)。
  • 当咱们须要修改参数的时候
    • 咱们能够在调用parameterize方法前修改逻辑。
    • 或者使用ParameterHandler来改造设置参数。
  • 咱们须要控制组装结果集的时候,
    • 也能够在query方法先后加入逻辑,
    • 或者使用ResultHandler来改造组装结果。
  • 懂的这些方法,才能理解我须要拦截什么对象,如何处理插件,这是MyBatis的核心内容。  
相关文章
相关标签/搜索