StatementHandler

本文详细解析了MyBatis中StatementHandler的工作原理,包括Configuration如何生成RoutingStatementHandler对象,以及其如何根据Executor类型创建具体的statementHandler对象,如SimpleStatementHandler、PreparedStatementHandler和CallableStatementHandler。探讨了在不同场景下,如SQL修改、参数修改和结果集控制时,如何通过拦截statementHandler进行操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在MyBatis中,

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

然后利用具体statementHandler的方法完成所需要的功能。

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

ab05b4a1e5c0dcf75560e8717ff5e56ff09.jpg

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

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

 

转载于:https://my.oschina.net/u/3847203/blog/3019245

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值