mybatisplus拦截器处理处理sql

news/2024/12/22 17:53:54/

场景

在项目中,会出现一些对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;}
}


http://www.ppmy.cn/news/667466.html

相关文章

Android拦截陌生号码,安卓手机应该如何设置拦截陌生号码

打开“手机管家”&#xff0c;“骚扰拦截”&#xff0c;点击“设置”&#xff0c;开启骚扰拦截&#xff0c;点击“拦截规则”&#xff0c;开启需要拦截的类型即可、打开手机2113&#xff0c;点击【电话】标志。52612、点击4102右下角‘三个点’标1653志&#xff0c;在点击【内骚…

dio拦截器 flutter_Flutter 中 Dio 拦截器

有时我们不需要复杂的应用程序,只需要显示一个数据列表的简单功能,我们可以通过一个简单的方法来实现: Future fetchItems() {return Dio().("https://some-website.com/listing"); } 复制代码 没有任何错误,也不用用log打印任何响应信息。 但是事实是,几乎没有…

自定义注解+拦截器优化项目代码

自定义注解拦截器的优势 类似用户权限或者接口限流的需求&#xff0c;但并不是所有操作或者接口需要。可以使用过滤器或者拦截器&#xff0c;但这样就必须在配置文件里加上所有方法或者使用通配符。 所以可以采用一种比较简单灵活的方式&#xff1a;采用自定义注解加Spring拦截…

Vue + Spring Boot 项目实战(六):前端路由与登录拦截器

本篇目录 前言一、前端路由二、使用 History 模式三、后端登录拦截器1.LoginController2.LoginInterceptor3.WebConfigurer4.效果检验 四、Vuex 与前端登录拦截器1.引入 Vuex2.修改路由配置3.使用钩子函数判断是否拦截4.修改 Login.vue5.效果检验 前言 这一篇主要讲前端路由与…

Springboot 拦截器链 - 加载拦截器

Springboot 拦截器链 - 加载拦截器 1.创建拦截器 // 创建拦截器需要实现 HandlerInterceptor 接口 @Slf4j public class HandleInterceptorImpl implements HandlerInterceptor{@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response,…

java拦截器没有生效_拦截器不生效

解决思路: 1、SpringMVC springMVC容器中需要添加相关配置,其中的 authenticationInterceptor就是目标拦截器 2、SpringBoot SpringBoot中的就需要区分是1.X还是2.X这个里面是有说法的,可以去网上百度 通过@Configuration注解将拦截器配置实现,这个只是其中一种方式; @Con…

拦截器原理多个拦截器执行顺序

拦截器原理多个拦截器执行顺序 1、根据当前请求&#xff0c;找到**HandlerExecutionChain【可以处理请求的handler以及handler的所有 拦截器】 2、先来顺序执行 所有拦截器的 preHandle方法 1、如果当前拦截器prehandler返回为true。则执行下一个拦截器的preHandle2、如果当…

java SpringBoot登录验证token拦截器

用户访问接口验证&#xff0c;如果用户没有登录&#xff0c;则不让他访问除登录外的任何接口。 实现思路&#xff1a; 1.前端登录&#xff0c;后端创建token(通过JWT这个依赖&#xff09;&#xff0c;返给前端 2.前端访问其他接口&#xff0c;传递token&#xff0c;后端判断…