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

news2024/9/22 9:38:13

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拦截并进行拼接

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/811739.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ssm学生贷款管理系统java助学贷银行jsp源代码mysql

本项目为前几天收费帮学妹做的一个项目&#xff0c;Java EE JSP项目&#xff0c;在工作环境中基本使用不到&#xff0c;但是很多学校把这个当作编程入门的项目来做&#xff0c;故分享出本项目供初学者参考。 一、项目描述 ssm学生贷款管理系统 系统有1权限&#xff1a;管理员…

自己搭建一个KMS服务器

本文仅适合个人用户&#xff0c;商业用户使用该程序可能会面临法律风险&#xff01;&#xff01;&#xff01; 建议有经济能力的读者支持正版。 知周所众&#xff0c;Windows和Office不是免费软件。如果是新购买的品牌机&#xff0c;则应该预装有正版的Windows家庭版&#xf…

Java+bcprov库实现对称和非对称加密算法

BouncyCastle&#xff0c;即BC&#xff0c;其是一款开源的密码包&#xff0c;包含了大量的密码算法。 本篇主要演示BC库引入&#xff0c;对称加密算法AES、SM4和 非对称加密EC算法的简单实现&#xff0c;以下是实现过程。 一、将BC添加到JRE环境 前提&#xff1a;已安装JRE环…

jmeter实现webservice接口测试

其实可以用jmeter两种sampler进行webservice的测试&#xff1a; 1、SOAP/XML-RPC Request(但是在jmeter3.2以后版本中已经取消了这个取样器) 2、HTTP请求 下面分别介绍两种方式 一、首先需要使用soupUI工具抓取webservice接口的部分需要的信息。 1、新建项目 2、新建成功的…

jenkins部署springboot项目(超详细讲解)

原来写了一篇博客是如何安装jenkins的&#xff0c;今天也来介绍一下怎么简单使用吧。 首先&#xff0c;我们要明确&#xff0c;jenkins自动化部署也只是代替你去做你要做的事&#xff0c; 我们梳理一下&#xff0c;你的代码写完&#xff0c;打包&#xff0c;扔到服务器上&…

tcp三次握手python实现和结果

下载抓包工具 安装 使用1 使用2 结果 红色笔为想要发送的数据。 代码 from scapy.all import * import logginglogging.getLogger(scapy.runtime).setLevel(logging.ERROR)target_ip = 172.20.211.4 target_port = 80 data = GET / HTTP/1.0 \r\n\r\ndef start_tcp(target_…

火爆全网,Charles抓包教程-辅助接口测试(二)

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 功能图标 从左到右…

mysql综合练习语法总结

mysql综合练习 用于 小白练手的主要用于以后语法忘了回来看 题目 # 1、创建数据库test01_library # 2、创建表 books&#xff0c;表结构如下&#xff1a;# 3、向books表中插入记录 # 1&#xff09;不指定字段名称&#xff0c;插入第一条记录 # 2&#xff09;指定所有字段名…

经典的数组和指针结合的OJ题

一、合并两个有序数组 leetcode链接 题目描述&#xff1a; 给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2&#xff0c;另有两个整数 m 和 n &#xff0c;分别表示 nums1 和 nums2 中的元素数目。 请你 合并 nums2 到 nums1 中&#xff0c;使合并后的数组同样按 非递…

seata组件使用期间,获取全局事务状态

GlobalStatus枚举类展示全局事务状态 官网链接&#xff1a;http://seata.io/zh-cn/docs/user/appendix/global-transaction-status.html 获得全局事务状态 // 开启全局事务地方获取全局事务xid String xid RootContext.getXID(); // 通过全局事务xid获得GlobalStatus枚举类 …

Transformer 论文学习笔记

重新学习了一下&#xff0c;整理了一下笔记 论文&#xff1a;《Attention Is All You Need》 代码&#xff1a;http://nlp.seas.harvard.edu/annotated-transformer/ 地址&#xff1a;https://arxiv.org/abs/1706.03762v5 翻译&#xff1a;Transformer论文翻译 特点&#xff1…

【Qt】利用Tool Button控件创建下拉菜单按钮

功能描述 利用qt进行界面设计和开发&#xff0c;创建下拉按钮。 详细实现 1、在qt侧工具栏利用设计打开.ui文件 2、创建按钮 创建一个Tool Button按钮&#xff0c;并在属性窗口中的QToolButton栏中选中MenuButtonPopup属性。 3、创建action 在Action编辑器创建对应的ac…

Dual pyramid GAN for semantic image synthesis

为了解决在图像合成时候小物体容易消失&#xff0c;大物体经常作为块的拼接来生成的。本文提出DP-GAN在所有尺度下共同学习空间自适应归一化模块的条件。这样尺度信息就会被双向使用&#xff0c;他统一了不同尺度的监督。(重点看图和代码) SPADE模块解释 GAN在生成包含许多不同…

JavaScript学习 -- 对称加密算法DES

在现代的互联网时代&#xff0c;数据安全性备受关注。为了保护敏感数据的机密性&#xff0c;对称加密算法是一种常用的方法。在JavaScript中&#xff0c;DES&#xff08;Data Encryption Standard&#xff09;是一种常用的对称加密算法。本篇博客将为您展示如何在JavaScript中使…

npm i 报错项目启动不了解决方法

1.场景 在另一台电脑低版本node环境跑的react项目&#xff0c;换到另一台电脑node18环境执行npm i时候报错 2.解决方法 脚本前加上set NODE_OPTIONS--openssl-legacy-provider

使用稀疏性(微球)进行色谱图基线估计和去噪(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

okvis

论文 Keyframe-Based Visual-Inertial SLAM Using Nonlinear Optimization 摘要 由于两种感知模式的互补性&#xff0c;视觉和惯性线索的融合在机器人中变得很流行。虽然迄今为止大多数融合策略都依赖于过滤方案&#xff0c;但视觉机器人界最近转向了非线性优化方法&#x…

Kafka的零拷贝

传统的IO模型 如果要把磁盘中的某个文件发送到远程服务器需要经历以下几个步骤 (1) 从磁盘中读取文件的内容&#xff0c;然后拷贝到内核缓冲区 (2) CPU把内核缓冲区的数据赋值到用户空间的缓冲区 (3) 在用户程序中调用write方法&#xff0c;把用户缓冲区的数据拷贝到内核下面…

树莓派上安装cmake

前言 记录一下在树莓派上安装cmake,因为之间安装出了点问题,但是后面解决了,于是记录一下。 直接安装报大红,看的我心里一颤 废话不多说,接下来上操作步骤 网上有的教程让wget下载压缩包,但是咱们就是不知道为啥我这样操作就是也报错,但是我感觉原理上是&#x1f197;的,并且…

Qt状态栏

QStatusBar QStatusBar* stBar statusBar();QLabel* lb1 new QLabel("标签1"); //lb1->setAlignment(Qt::AlignLeft); //左对齐QLabel* lb2 new QLabel("标签2");QLineEdit* edit new QLineEdit("edit");QPushButton* btnOpe…