读mybatis源码之八:声明处理器StatementHandler

本文探讨了在执行器中如何获取并利用声明处理器进行操作,通过拦截器定义插件,实现灵活的数据处理流程。重点介绍了路由声明处理器如何获取SimpleStatementHandler、PreparedStatementHandler、CallableStatementHandler,并解释了如何通过ms.getStatementType参数自定义使用的处理器类型,从STATEMENT到CALLABLE的配置选项。此外,文章深入阐述了BaseStatementHandler作为声明处理器基类的角色,及其内部实现的几个关键组件如TypeHandlerRegistry、ResultSetHandler和ParameterHandler。最后,通过实例展示了如何在mapper的XML标签中配置statementType属性来选择不同的处理器,实现对数据库操作的高效管理。

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

在执行器中,都会获取声明处理器:

public StatementHandler newStatementHandler(Executor executor, MappedStatement mappedStatement, Object parameterObject, RowBounds rowBounds, ResultHandler resultHandler, BoundSql boundSql) {
    StatementHandler statementHandler = new RoutingStatementHandler(executor, mappedStatement, parameterObject, rowBounds, resultHandler, boundSql);
    statementHandler = (StatementHandler) interceptorChain.pluginAll(statementHandler);
    return statementHandler;
  }
statementHandler = (StatementHandler) interceptorChain.pluginAll(statementHandler);

使用拦截器,声明处理可以定义插件


使用路由声明处理器,可以获取SimpleStatementHandler、PreparedStatementHandler、CallableStatementHandler三大处理器。

到底使用哪个处理器,是由ms.getStatementType参数决定,默认是mappedStatement.statementType = StatementType.PREPARED;
在mapper里面的执行语句 xml标签中可以配置statementType属性:

Any one of STATEMENT, PREPARED or CALLABLE. This causes MyBatis to use Statement, PreparedStatement or CallableStatement 
respectively. Default: PREPARED.

BaseStatementHandler
声明处理器基类,主要是产生 :
protected final TypeHandlerRegistry typeHandlerRegistry; //类型处理注册
protected final ResultSetHandler resultSetHandler;  //结果处理
protected final ParameterHandler parameterHandler; //参数处理
另外还准备Statement,具体由各个处理器生成instantiateStatement


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值