mybatis拦截器(一)

一、MyBatis拦截器介绍

mybatis拦截器可以拦截如下4中类型

  • Executor sql的内部执行器
  • ParameterHandler 拦截参数的处理
  • StatementHandler 拦截sql的构建
  • ResultSetHandler 拦截结果的处理

这4中不同类型的拦截器的拦截顺序为从上到下的顺序,即
Executor -> ParameterHandler -> StatementHandler -> ResultSetHandler

如果相同类型的拦截器,比如Executor类型的拦截器有两个,则执行顺序为将拦截器添加到SqlSessionFactory的逆向顺序执行

比如SqlSessionFactory中先添加了Executor类型的A拦截器,在添加了Executor类型的B拦截器,则会先执行B拦截器,在执行A拦截器

二、创建拦截器

这里因为我的业务需求是只需要拦截查询语句,所以我用到的是Executor拦截器

@Intercepts:申明这是一个拦截器,并配置拦截器信息
@Signature:拦截配置,type为上述介绍的拦截类型,method为需要拦截Executor接口中的什么方法,args为填写method的方法参数,因为存在方法重载,所以需要指定参数,下文中将两个query同时拦截

@Intercepts({
        @Signature(type = Executor.class, method = "query", args = {MappedStatement.class, Object.class, RowBounds.class, ResultHandler.class}),
        @Signature(type = Executor.class, method = "query", args = {MappedStatement.class, Object.class, RowBounds.class, ResultHandler.class, CacheKey.class, BoundSql.class})
})
// 配置为组件让spring加载后会自动加入到SqlSessionFactory中生效
@Component
public class DeptDataScopeInterceptor implements Interceptor {

    @Override
    public Object intercept(Invocation invocation) throws Throwable {
        Object[] args = invocation.getArgs();

		// ------自定义的拦截业务开始------

		// ------自定义的拦截业务结束------
        return invocation.proceed();
    }
    
    @Override
    public Object plugin(Object target) {
        return Plugin.wrap(target, this);
    }

    @Override
    public void setProperties(Properties properties) {

    }

}

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值