首先@Intercepts注解 可以看这篇文章https://blog.csdn.net/weixin_43505211/article/details/128050083

建个类 实现 Interceptor接口,重写intercept方法;

//首先获取该xml信息

Method invocationMethod = invocation.getMethod();

//获取名称 用来判断是否是入参

String invocationMethodName = invocationMethod.getName();

if ("setParameters".equals(invocationMethodName)) {

// 获取拦截器拦截的设置参数对象parameterHandler

ParameterHandler parameterHandler = (ParameterHandler) invocation.getTarget();

// 通过mybatis的反射来获取对应的值,目的是找到方法的基础信息

MetaObject metaResultSetHandler = MetaObject.forObject(parameterHandler, DEFAULT_OBJECT_FACTORY, DEFAULT_OBJECT_WRAPPER_FACTORY, REFLECTOR_FACTORY);

MappedStatement mappedStatement = (MappedStatement) metaResultSetHandler.getValue("mappedStatement");

//获取方法

Object parameterObject = metaResultSetHandler.getValue("parameterObject");

// id字段对应执行的SQL的方法的全路径,包含类名和方法名

String id = mappedStatement.getId();

String className = id.substring(0, id.lastIndexOf("."));

String methodName = id.substring(id.lastIndexOf(".") + 1);

// 动态加载类并获取类中的方法

final Class<?> aClass = Class.forName(className);

final Method method = ReflectUtil.getMethodByNameIgnoreCase(aClass, methodName);

if (method.isAnnotationPresent(DorisDtAnnotation.class) || aClass.isAnnotationPresent(DorisDtAnnotation.class)) {

// 获取方法上的注解以及注解对应的参数

Balaba paramAnnotation = Optional.ofNullable(method.getAnnotation(Balaba.class)).orElseGet(() -> aClass.getAnnotation(Balaba.class));

String timeType = paramAnnotation.timeType();

// 反射获取参数对象

MetaObject param = MetaObject.forObject(parameterObject, DEFAULT_OBJECT_FACTORY, DEFAULT_OBJECT_WRAPPER_FACTORY, REFLECTOR_FACTORY);

//获取参数,然会做处理

Object timeTypeValue = param.getValue(timeType);

}

}

这样就可以在每条sql的时候做判断,方便做统一处理。

利用mybatis拦截器注解处理sql相关推荐

  1. 老年人教程:MyBatis拦截器动态修改SQL(更新与插入)语句

    注:本文编写与 2019年12月17日, 内容可能存在时效性问题. 数据库使用MySQL5.7 集成于SpringBoot 2.0.X , 引用国产的开源工具类Hutool 本教程建议显示大纲视图 配 ...

  2. mybatis拦截器,并使用jsqlparser重写sql

    mybatis拦截器 mybatis拦截器基础知识 编写类继承mybatis的Interceptor接口,并实现其相关方法.mybatis的拦截器,是被动态代理类主动调用的. intercept:在拦 ...

  3. mybatis拦截器实现权限管理

    框架设计 基于Spring Security+JWT技术实现登录认证和访问授权,基于Mybatis 拦截器实现数据权限的控制.由于已有前文介绍Spring Security如有兴趣可以查看,在此将重点 ...

  4. MyBatis拦截器原理探究MyBatis拦截器原理探究

    MyBatis拦截器介绍 MyBatis提供了一种插件(plugin)的功能,虽然叫做插件,但其实这是拦截器功能.那么拦截器拦截MyBatis中的哪些内容呢? 我们进入官网看一看: MyBatis拦截 ...

  5. insert into select 主键自增_springboot2结合mybatis拦截器实现主键自动生成

    点击上方蓝字关注我们 1 01 前言 前阵子和朋友聊天,他说他们项目有个需求,要实现主键自动生成,不想每次新增的时候,都手动设置主键.于是我就问他,那你们数据库表设置主键自动递增不就得了.他的回答是他 ...

  6. Mybatis 拦截器介绍

    Mybatis 拦截器介绍 1.1 目录 1.2 前言 1.3 Interceptor接口 1.4 注册拦截器 1.5 Mybatis可拦截的方法 1.6 利用拦截器进行分页 拦截器的一个作用就是我们 ...

  7. Mybatis源码分析之(六)mybatis拦截器(Interceptor)的实现原理

    文章目录 前言 InterceptorChain保存所有的Interceptor 创建四大对象都走Configuration InterceptorChain增强对象方法 Plugin封装动态代理,让 ...

  8. MyBatis拦截器原理探究MyBatis拦截器原理探究 1

    MyBatis拦截器介绍 MyBatis提供了一种插件(plugin)的功能,虽然叫做插件,但其实这是拦截器功能.那么拦截器拦截MyBatis中的哪些内容呢? 我们进入官网看一看: MyBatis拦截 ...

  9. by mybatis 自定义order_springboot2结合mybatis拦截器实现主键自动生成

    点击上方蓝字关注我们 1 01 前言 前阵子和朋友聊天,他说他们项目有个需求,要实现主键自动生成,不想每次新增的时候,都手动设置主键.于是我就问他,那你们数据库表设置主键自动递增不就得了.他的回答是他 ...

最新文章

  1. ECSHOP商品编辑器上传中文名图片产生乱码
  2. 遭遇错误:ORA-01031
  3. cscript.exe自动启动解决方法分享
  4. 关于java中Scanner的next和nextLine
  5. 9本Java程序员必读的书
  6. WPF 基础控件之CheckBox样式
  7. 人脸特征值能存放在sql server中吗_SQL运行内幕:从执行原理看调优的本质
  8. [vue] 说说你对slot的理解有多少?slot使用场景有哪些?
  9. 2017.9.21 所驼门王的宝藏 思考记录
  10. 实践:SpringBoot实现定时任务的动态增删启停
  11. plc tcp ip通讯怎么只能连一个客户端_如何远程读取西门子PLC数据?
  12. 使用promise解决回调地狱_回调地狱的由来和如何利用promise解决回调地狱
  13. iOS调试篇:多线程造成的崩溃
  14. 免费股票数据接口api接口应该如何区分?
  15. 内蒙古煤炭经济杂志社内蒙古煤炭经济编辑部2022年第14期目录
  16. layui upload 提示语
  17. OSGi bundle activator不工作解决
  18. HTTP协议--概述
  19. Oracle 自定义数据类型Type
  20. 如何选择正确的RF连接器

热门文章

  1. 小娱路由php,跟风折腾小娱路由器XY-C5,做低功耗路由+下载器+轻量化NAS.
  2. BP算法推导(python实现)
  3. L298N驱动俩路电机按键控制正反转
  4. 访客模式 无痕模式 区别_模式:访客模式
  5. Linux系统管理 4 Shell的基本应用
  6. 浅层神经网络回归预测,基于MATLAB。 模型包括BPNN,极限学习机(ELM)和Elman网络
  7. java基于springboot+vue的协同过滤算法的图书推荐系统 nodejs
  8. python3安装要钱吗_3b1b/manim数学动画引擎安装教程(2020-8月)
  9. ICA简介:独立成分分析
  10. 1849 将字符串拆分为递减的连续值(递归)