mybatisplus拦截器处理处理sql
场景
在项目中,会出现一些对sql处理的需求,如果sql操作很多,为了简化处理,可以在sql执行的时候加入一个拦截器,并对将要执行的sql进行统一的处理。
这里已使用了mybatisplus客户端为例的实现方式。
代码实现
- maven引入依赖jar,数据库配置就不写这了。
<dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.4.3</version></dependency><dependency><groupId>com.alibaba</groupId><artifactId>druid-spring-boot-starter</artifactId><version>1.2.5</version></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><scope>runtime</scope></dependency>
- 自定义拦截器
import com.baomidou.mybatisplus.extension.plugins.inner.InnerInterceptor;
import lombok.extern.slf4j.Slf4j;
import net.sf.jsqlparser.JSQLParserException;
import net.sf.jsqlparser.parser.CCJSqlParserUtil;
import net.sf.jsqlparser.statement.Statement;
import net.sf.jsqlparser.util.TablesNamesFinder;
import org.apache.ibatis.executor.Executor;
import org.apache.ibatis.executor.statement.StatementHandler;
import org.apache.ibatis.mapping.BoundSql;
import org.apache.ibatis.mapping.MappedStatement;
import org.apache.ibatis.session.ResultHandler;
import org.apache.ibatis.session.RowBounds;import java.sql.Connection;
import java.sql.SQLException;
import java.util.List;
import java.util.Properties;@Slf4j
public class LizzMybatisIntercepts implements InnerInterceptor {@Overridepublic boolean willDoQuery(Executor executor, MappedStatement ms, Object parameter, RowBounds rowBounds, ResultHandler resultHandler, BoundSql boundSql) throws SQLException {log.info("#####willDoQuery");return false;}@Overridepublic void beforeQuery(Executor executor, MappedStatement ms, Object parameter, RowBounds rowBounds, ResultHandler resultHandler, BoundSql boundSql) throws SQLException {log.info("#####beforeQuery");}@Overridepublic boolean willDoUpdate(Executor executor, MappedStatement ms, Object parameter) throws SQLException {log.info("#####willDoUpdate");// 一堆sql处理仅供参考BoundSql boundSql = ms.getBoundSql(parameter);ms.getSqlSource().getClass();String sql = boundSql.getSql();Statement statement = null;try {statement = CCJSqlParserUtil.parse(sql);} catch (JSQLParserException e) {e.printStackTrace();}TablesNamesFinder tablesNamesFinder = new TablesNamesFinder();List<String> tableList = tablesNamesFinder.getTableList(statement);log.info("sql:{}",sql);return false;}@Overridepublic void beforeUpdate(Executor executor, MappedStatement ms, Object parameter) throws SQLException {log.info("#####beforeUpdate");}@Overridepublic void beforePrepare(StatementHandler sh, Connection connection, Integer transactionTimeout) {log.info("#####beforePrepare");}@Overridepublic void beforeGetBoundSql(StatementHandler sh) {log.info("#####beforeGetBoundSql");}@Overridepublic void setProperties(Properties properties) {log.info("#####setProperties");}
}
- 增加拦截器
@Configuration
public class CipherMybatisPlusConfig {@Beanpublic MybatisPlusInterceptor mybatisPlusInterceptor() {MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();// 自定义拦截器,先添加先执行。interceptor.addInnerInterceptor(new LizzMybatisIntercepts());// 自带分页拦截器interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));return interceptor;}
}
mybatisplus拦截器处理处理sql相关推荐
- MyBatis-plus拦截器
在项目中,会出现一些对sql处理的需求,如果sql操作很多,为了简化处理,可以在sql执行的时候加入一个拦截器,并对将要执行的sql进行统一的处理. mybatis拦截器 在以前一般都选用mybati ...
- 老年人教程:MyBatis拦截器动态修改SQL(更新与插入)语句
注:本文编写与 2019年12月17日, 内容可能存在时效性问题. 数据库使用MySQL5.7 集成于SpringBoot 2.0.X , 引用国产的开源工具类Hutool 本教程建议显示大纲视图 配 ...
- Mybatis 通过拦截器动态修改SQL
01 使用场景 当我们在多租户的项目中,编写SQL语句都要带上tenant字段,用于区分不同的租户只能操作自己的数据. 比如,像下面的SQL select * from member where id ...
- springboot注解 + mybatisplus拦截器实现数据权限拦截(兼容分页插件)
需求 要求在同一个数据请求方法中,根据不同的权限返回不同的数据集,而且无需并且不能由研发编码控制. 设计思路 竟然要实现查询语句与权限解耦,第一想法联想到的就是AOP,拦截所有的底层sql,加入过滤条 ...
- 利用mybatis拦截器注解处理sql
首先@Intercepts注解 可以看这篇文章https://blog.csdn.net/weixin_43505211/article/details/128050083 建个类 实现 Interc ...
- java拦截器实现防止SQL注入与xss攻击拦截
一.SQL注入简介 SQL注入是比较常见的网络攻击方式之一,它不是利用操作系统的BUG来实现攻击,而是针对程序员编程时的疏忽,通过SQL语句,实现无帐号登录,甚至篡改数据库. 二.SQL注入攻击的总体 ...
- springbootjpa之hibernate sql拦截器
springbootjpa之hibernate sql拦截器 解决问题,数据查询权限问题: 原理:通过拦截sql语句,然后解析sql语句,加入自定义查询条件,做到数据权限拦截: hibernate 文 ...
- mybatis拦截器,并使用jsqlparser重写sql
mybatis拦截器 mybatis拦截器基础知识 编写类继承mybatis的Interceptor接口,并实现其相关方法.mybatis的拦截器,是被动态代理类主动调用的. intercept:在拦 ...
- mybatis拦截器实现权限管理
框架设计 基于Spring Security+JWT技术实现登录认证和访问授权,基于Mybatis 拦截器实现数据权限的控制.由于已有前文介绍Spring Security如有兴趣可以查看,在此将重点 ...
最新文章
- java B2B2C电子商务平台分析之十一------配置中心和消息总线
- 缓存 Memached
- 将VIM配置成强大的IDE(三)
- php加载autoload,php自动加载类__autoload()的方法_PHP教程
- python元组的定义方式_学习Python元组,有哪些必须要掌握的内容
- python 删除set指定值_python中的变量和数据类型(三)
- SharePoint 取消分享时的默认发邮件
- Android四大组件-Broadcast Receiver
- React Native : AsyncStorage 存储
- 谁说漂亮女程序猿就不能拿大厂Offer了?
- [Codeforces Round #152 (Div. 2)]A. Cupboards
- sync.Once 使用及解析
- 飞桨领航团西安回顾|技术干货大厂offer独家经验分享
- |app自动化测试之Appium WebView 技术原理
- S5PV210 DDR2初始化 28个步骤总结
- 铱金属配合物Ir(dpbpa)2bphen+PF6-|Ir(dtbpa)3|Ir(dtq)2bpy+PF6-的合成
- 分类堆叠柱状图顺序排列及其添加合适条块标签
- 【JAVA】7-1 厘米换算英尺英寸
- 计算机三级 网络技术 大题第一题 答题技巧分享
- SpringBoot异常处理回滚事务详解(自动回滚、手动回滚、部分回滚)
热门文章
- 微型计算机系统采用总,微型计算机系统采用总线对CPU、存储器设备进行连接。他们主要负责传送的信号是______。...
- 基于Python+uiautomation的windowsGUI自动化测试概述
- 原创:FAT8单片机 Flash文件系统V0.0.1
- 无人机航空摄影测绘技术有哪些优势?
- luogu P2587 [ZJOI2008]泡泡堂
- 玩转微信应用号,「小程序」开发实操指南第一弹
- 科智星获8000万元天使轮融资,2020年9月开始临床实验...
- ios navigationBar 设置透明
- YBTOJ 数独游戏
- 动物园(虚函数与多态)