场景

在项目中,会出现一些对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相关推荐

  1. MyBatis-plus拦截器

    在项目中,会出现一些对sql处理的需求,如果sql操作很多,为了简化处理,可以在sql执行的时候加入一个拦截器,并对将要执行的sql进行统一的处理. mybatis拦截器 在以前一般都选用mybati ...

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

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

  3. Mybatis 通过拦截器动态修改SQL

    01 使用场景 当我们在多租户的项目中,编写SQL语句都要带上tenant字段,用于区分不同的租户只能操作自己的数据. 比如,像下面的SQL select * from member where id ...

  4. springboot注解 + mybatisplus拦截器实现数据权限拦截(兼容分页插件)

    需求 要求在同一个数据请求方法中,根据不同的权限返回不同的数据集,而且无需并且不能由研发编码控制. 设计思路 竟然要实现查询语句与权限解耦,第一想法联想到的就是AOP,拦截所有的底层sql,加入过滤条 ...

  5. 利用mybatis拦截器注解处理sql

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

  6. java拦截器实现防止SQL注入与xss攻击拦截

    一.SQL注入简介 SQL注入是比较常见的网络攻击方式之一,它不是利用操作系统的BUG来实现攻击,而是针对程序员编程时的疏忽,通过SQL语句,实现无帐号登录,甚至篡改数据库. 二.SQL注入攻击的总体 ...

  7. springbootjpa之hibernate sql拦截器

    springbootjpa之hibernate sql拦截器 解决问题,数据查询权限问题: 原理:通过拦截sql语句,然后解析sql语句,加入自定义查询条件,做到数据权限拦截: hibernate 文 ...

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

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

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

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

最新文章

  1. java B2B2C电子商务平台分析之十一------配置中心和消息总线
  2. 缓存 Memached
  3. 将VIM配置成强大的IDE(三)
  4. php加载autoload,php自动加载类__autoload()的方法_PHP教程
  5. python元组的定义方式_学习Python元组,有哪些必须要掌握的内容
  6. python 删除set指定值_python中的变量和数据类型(三)
  7. SharePoint 取消分享时的默认发邮件
  8. Android四大组件-Broadcast Receiver
  9. React Native : AsyncStorage 存储
  10. 谁说漂亮女程序猿就不能拿大厂Offer了?
  11. [Codeforces Round #152 (Div. 2)]A. Cupboards
  12. sync.Once 使用及解析
  13. 飞桨领航团西安回顾|技术干货大厂offer独家经验分享
  14. |app自动化测试之Appium WebView 技术原理
  15. S5PV210 DDR2初始化 28个步骤总结
  16. 铱金属配合物Ir(dpbpa)2bphen+PF6-|Ir(dtbpa)3|Ir(dtq)2bpy+PF6-的合成
  17. 分类堆叠柱状图顺序排列及其添加合适条块标签
  18. 【JAVA】7-1 厘米换算英尺英寸
  19. 计算机三级 网络技术 大题第一题 答题技巧分享
  20. SpringBoot异常处理回滚事务详解(自动回滚、手动回滚、部分回滚)

热门文章

  1. 微型计算机系统采用总,微型计算机系统采用总线对CPU、存储器设备进行连接。他们主要负责传送的信号是______。...
  2. 基于Python+uiautomation的windowsGUI自动化测试概述
  3. 原创:FAT8单片机 Flash文件系统V0.0.1
  4. 无人机航空摄影测绘技术有哪些优势?
  5. luogu P2587 [ZJOI2008]泡泡堂
  6. 玩转微信应用号,「小程序」开发实操指南第一弹
  7. 科智星获8000万元天使轮融资,2020年9月开始临床实验...
  8. ios navigationBar 设置透明
  9. YBTOJ 数独游戏
  10. 动物园(虚函数与多态)