利用mybatis拦截器注解处理sql
首先@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相关推荐
- 老年人教程:MyBatis拦截器动态修改SQL(更新与插入)语句
注:本文编写与 2019年12月17日, 内容可能存在时效性问题. 数据库使用MySQL5.7 集成于SpringBoot 2.0.X , 引用国产的开源工具类Hutool 本教程建议显示大纲视图 配 ...
- mybatis拦截器,并使用jsqlparser重写sql
mybatis拦截器 mybatis拦截器基础知识 编写类继承mybatis的Interceptor接口,并实现其相关方法.mybatis的拦截器,是被动态代理类主动调用的. intercept:在拦 ...
- mybatis拦截器实现权限管理
框架设计 基于Spring Security+JWT技术实现登录认证和访问授权,基于Mybatis 拦截器实现数据权限的控制.由于已有前文介绍Spring Security如有兴趣可以查看,在此将重点 ...
- MyBatis拦截器原理探究MyBatis拦截器原理探究
MyBatis拦截器介绍 MyBatis提供了一种插件(plugin)的功能,虽然叫做插件,但其实这是拦截器功能.那么拦截器拦截MyBatis中的哪些内容呢? 我们进入官网看一看: MyBatis拦截 ...
- insert into select 主键自增_springboot2结合mybatis拦截器实现主键自动生成
点击上方蓝字关注我们 1 01 前言 前阵子和朋友聊天,他说他们项目有个需求,要实现主键自动生成,不想每次新增的时候,都手动设置主键.于是我就问他,那你们数据库表设置主键自动递增不就得了.他的回答是他 ...
- Mybatis 拦截器介绍
Mybatis 拦截器介绍 1.1 目录 1.2 前言 1.3 Interceptor接口 1.4 注册拦截器 1.5 Mybatis可拦截的方法 1.6 利用拦截器进行分页 拦截器的一个作用就是我们 ...
- Mybatis源码分析之(六)mybatis拦截器(Interceptor)的实现原理
文章目录 前言 InterceptorChain保存所有的Interceptor 创建四大对象都走Configuration InterceptorChain增强对象方法 Plugin封装动态代理,让 ...
- MyBatis拦截器原理探究MyBatis拦截器原理探究 1
MyBatis拦截器介绍 MyBatis提供了一种插件(plugin)的功能,虽然叫做插件,但其实这是拦截器功能.那么拦截器拦截MyBatis中的哪些内容呢? 我们进入官网看一看: MyBatis拦截 ...
- by mybatis 自定义order_springboot2结合mybatis拦截器实现主键自动生成
点击上方蓝字关注我们 1 01 前言 前阵子和朋友聊天,他说他们项目有个需求,要实现主键自动生成,不想每次新增的时候,都手动设置主键.于是我就问他,那你们数据库表设置主键自动递增不就得了.他的回答是他 ...
最新文章
- ECSHOP商品编辑器上传中文名图片产生乱码
- 遭遇错误:ORA-01031
- cscript.exe自动启动解决方法分享
- 关于java中Scanner的next和nextLine
- 9本Java程序员必读的书
- WPF 基础控件之CheckBox样式
- 人脸特征值能存放在sql server中吗_SQL运行内幕:从执行原理看调优的本质
- [vue] 说说你对slot的理解有多少?slot使用场景有哪些?
- 2017.9.21 所驼门王的宝藏 思考记录
- 实践:SpringBoot实现定时任务的动态增删启停
- plc tcp ip通讯怎么只能连一个客户端_如何远程读取西门子PLC数据?
- 使用promise解决回调地狱_回调地狱的由来和如何利用promise解决回调地狱
- iOS调试篇:多线程造成的崩溃
- 免费股票数据接口api接口应该如何区分?
- 内蒙古煤炭经济杂志社内蒙古煤炭经济编辑部2022年第14期目录
- layui upload 提示语
- OSGi bundle activator不工作解决
- HTTP协议--概述
- Oracle 自定义数据类型Type
- 如何选择正确的RF连接器
热门文章
- 小娱路由php,跟风折腾小娱路由器XY-C5,做低功耗路由+下载器+轻量化NAS.
- BP算法推导(python实现)
- L298N驱动俩路电机按键控制正反转
- 访客模式 无痕模式 区别_模式:访客模式
- Linux系统管理 4 Shell的基本应用
- 浅层神经网络回归预测,基于MATLAB。 模型包括BPNN,极限学习机(ELM)和Elman网络
- java基于springboot+vue的协同过滤算法的图书推荐系统 nodejs
- python3安装要钱吗_3b1b/manim数学动画引擎安装教程(2020-8月)
- ICA简介:独立成分分析
- 1849 将字符串拆分为递减的连续值(递归)