MybatisPlusInterceptor实现sql拦截器(超详细)

时间:2024-01-10 01:00:27 标签:  sql  java  数据库  

1 . 导入pom

        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.4.2</version>
        </dependency>    

2 . 配置下MybatisPlus的yml

mybatis-plus:
  mapper-locations:
  - classpath:mapper/*/*Mapper.xml  
  global-config:
    db-config:
      id-type: auto
    banner: true
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

3 . 实体类

@Data
@TableName("sys_user")
@ApiModel(value = "SysUser对象", description = "用户信息")
public class SysUser implements Serializable {


    @TableId("SU_CODE")
    @ApiModelProperty(value = "用户编码")
    private String suCode;

    @TableField("SUS_CODE")
    @ApiModelProperty(value = "分类编码")
    private String susCode;

    @TableField("SU_NAME")
    @ApiModelProperty(value = "用户姓名")
    private String suName;

    @TableField("SU_SEX")
    @ApiModelProperty(value = "性别:0未知,1男,2女")
    private Integer suSex;

    @TableField("SU_AGE")
    @ApiModelProperty(value = "年龄")
    private Integer suAge;

}

4 .  DTO

@Data
@ApiModel(value = "SysUserDTO对象", description = "用户信息DTO")
public class SysUserDTO {


    @ApiModelProperty(value = "用户编码")
    private String suCode;

    @ApiModelProperty(value = "分类编码")
    private String susCode;

    @ApiModelProperty(value = "用户姓名")
    private String suName;

    @ApiModelProperty(value = "性别:0未知,1男,2女")
    private Integer suSex;

    @ApiModelProperty(value = "年龄")
    private Integer suAge;


    private Integer page = 1;
    private Integer limit = 10;
}

5 . MybatisPlus的config


import cn.hutool.core.util.ArrayUtil;
import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.autoconfigure.ConfigurationCustomizer;
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.handler.TenantLineHandler;
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.TenantLineInnerInterceptor;
import lombok.extern.slf4j.Slf4j;
import net.sf.jsqlparser.expression.Expression;
import net.sf.jsqlparser.expression.LongValue;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Slf4j
@Configuration
public class MybatisPlusConfig {

    @Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor() {
        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
        log.info("进入sql拦截器");
        //分页拦截器插件
        //如果用了分页插件注意先 add TenantLineInnerInterceptor 再 add PaginationInnerInterceptor
        interceptor.addInnerInterceptor(new TenantLineInnerInterceptor(new TenantLineHandler() {
            //租户id(拼接sql的条件的值)
            @Override
            public Expression getTenantId() {
                return new LongValue(1);
            }

            //追加的字段(拼接sql的条件)
            @Override
            public String getTenantIdColumn() {
                return "SU_CODE";
            }

            //去掉实体类字段
            @Override
            public boolean ignoreTable(String tableName) {
                String[] arr = new String[]{
                        "susCode",
                        "suName",
                        "suSex",
                        "suAge"
                };
                return ArrayUtil.contains(arr, tableName);
            }
        }));
        interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
        return interceptor;
    }

    // 用了分页插件必须设置 MybatisConfiguration#useDeprecatedExecutor = false
    //        interceptor.addInnerInterceptor(new PaginationInnerInterceptor());
    @Bean
    public ConfigurationCustomizer configurationCustomizer() {
        return configuration -> configuration.setUseDeprecatedExecutor(false);
    }
}

6 . controller

@RestController
@RequestMapping("exam")
public class SysUserController {
    @Autowired
    private SysUserService sysUserService;


    @RequestMapping("list")
    public IPage<SysUser> list(SysUserDTO userDTO) {
        IPage<SysUser> page = new Page<>(userDTO.getPage(), userDTO.getLimit());
        return sysUserService.page(page);
    }

}

7 . 测试

 成功实现sql拦截并进行拼接

来源:https://blоg.сsdn.nеt/а17331003724/аrtiсlе/dеtаils/130005913

智能推荐

    前面两篇文章的过滤器和拦截器&#xff0c;我们都提到过可以做诸如权限验证的事情。http/

标签:SpringBoot  spring boot  后端  java  

背景现代网络环境中,敏感数据的处理是至关重要的。敏感数据包括个人身份信息、银行账号、手机号码等,泄露这些数据可能导致用户隐私泄露、财产损失等严重后果。因此,对敏感数据进行脱敏处理是一种必要的安全措施。比如页面上常见的敏感数据都是加*遮挡处理过的,如下图所示。接下来本文将以Spring Boot和MyBatis框架实现返回数据的脱敏处理。脱

标签:优雅  数据  拦截器  mybatis  

12.1、环境搭建创建名为spring_mvc_interceptor的新module,过程参考9.1节和9.5节12.1.1、页面请求示例<a th:href=@{/test/hello}>测试拦截器</a>

标签:拦截器  SpringMvc  

0.1、索引https://waterflow.link/articles/1665853719750当我们编写 HTTP 应用程序时,您可以使用 HTTP 中间件包装特定于路由的应用程序处理程序,可以在执行应用程序处理程序之前和之后执行一些常见的逻辑。 我们通常使用中间件来编写跨领域组件,例如授权、日志记录、缓存等。在 gRPC 中可以使用称为拦截器的概念来实现相同的功能。通过使用拦截器,我们可以在客户端和服务器上拦截 RPC 方法的执行。 在客户端和服务器上,都有两种类型的拦截器:UnaryInterceptor(一元拦截器)StreamInterceptor(流

标签:拦截器  grpc  

Mybatis的拦截

标签:mybatis  java  数据库  

(创作不易&#xff0c;感谢有你&#xf

标签:# 前端vue入门  vue.js  javascript  前端  前端框架  开发语言  

过滤器(Filter):当你有一堆东西的时候,你只希望选择符合你要求的某一些东西。定义这些要求的工具,就是过滤器。 拦截器(Interceptor):在一个流程正在进行的时候,你希望干预它的进展,甚至终止它进行,这是拦截器做的事情。 监听器(Listener):当一个事件发生的时候,你希望获得这个事件发生的详细信息,而并不想干预这个事件本身的进程,这就要用到监听器。

标签:监听器  过滤器  拦截器监听器  过滤器  拦截器  

猜你喜欢

通过拦截器,我们可以针对特定 URI 做拦截,做相关业务处理,比如检查用户是否登录,打印每个请求的处理耗时等。一、新建一个拦截器新建登录验证类&nbsp;LoginValidationInterceptor.java:package site.excepti

标签:拦截器  spring  Boot  

目录1 Vue 路由与导航守卫1.1 Vue 路由简介1.2 导航守卫概述2 实现访问拦截的核心概念2.1 路由守卫介绍2.1.1 前置守卫(beforeEach)2.1.2 后置钩子(afterEach)2.1.3 解析守卫(beforeResolve)2.2 鉴权逻辑设计2.3 登录验证机制3 实现页面访问拦截的步骤3.1 路由配置

标签:页面  Vue  

那么题意&#xff1a; 某国为了防御敌国的导弹袭击&#x

标签:动态规划  算法  

感兴趣的可以查看上一篇过滤器的使用 【Springboot】Filter 过滤器的使用

标签:spring boot  java  spring  

       最近在研究美利坚的区域高超声速反导计划&#xff0c;里面提到用SM-6作为

标签:无人机  

在Vue项目中&#xff0c;可以使用axios来进行网络请求。拦截器是axios提供的一个功能&#

标签:vue.js  前端  javascript  

一、过滤器1.什么是过滤器?  过滤器是一种用于JavaWeb应用程序中的组件,它可以拦截HTTP请求和响应,以实现一些特定的功能。  过滤器可以对请求和响应进行修改,可以阻止请求进入Servlet,也可以修改响应返回给客户端。2.过滤器的主要作用登录验证:检查用户是否已经登录,如果没有登录则跳转到登录页面。权限控制:检查用户是否有访问某个资源的权限,如果没有则提示错误信息或者跳转到其他页面。编码转换:设置请求和响应的字符编码,解决中文乱码问题。敏感词过滤:替换或者屏蔽掉请求参数或者响应内容中的敏感词汇。

标签:过滤器  区别  拦截器  

feign请求拦截&#xff0c;处理head、param、body参数&#xff0c;附加解密定制

标签:Feign  java  postman  JSON  

前言一旦给 axios 添加了拦截器,就会对所有的 post、get 等请求进行拦截。但不是所有的请求都需要进行拦截,如公共的请求,即不需要用户登录即可发起请求的 api 我们应当放行。通过 axios.interceptors.request.eject(requestId) 清除 request 或者 response 的拦截器。想要再次恢复就需要重新创建拦截器。第二种通过 axios.CancelToken.source() 更加灵活地处理需拦截的逻辑,如只需要拦截没有登录的请求,不需要所有请求都需要登录,并可处理本次的错误消息。

标签:Axios  CancelToken  

相关问题

相关文章

热门文章

推荐文章

相关标签