MyBatis Plus 插件

news2024/10/5 14:34:11

一、分页插件

多个插件的情况下分页插件需要放到最后执行

1.1、增加分页插件配置

package com.xx.config;

import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * @author aqi
 * @date 2023/5/15 14:05
 */
@Configuration
public class MybatisPlusConfig {

    @Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor() {
        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
        interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.H2));
        return interceptor;
    }
}

1.2、分页插件参数说明

官网配置说明地址

1.3、编写测试用例

package com.xx;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.xx.domain.AirlinesInfo;
import com.xx.service.AirlinesInfoService;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;

import javax.annotation.Resource;
import java.util.List;

/**
 * @author aqi
 */
@SpringBootTest
public class PaginationTest {

    @Resource
    private AirlinesInfoService airlinesInfoService;

    @Test
    void test() {
        Page<AirlinesInfo> page = new Page<>(1, 5);
        Page<AirlinesInfo> pageList = airlinesInfoService.page(page);
        List<AirlinesInfo> list = pageList.getRecords();
        list.forEach(System.out::println);


    }
}

1.4、测试用例执行结果

在这里插入图片描述

1.5、Page对象说明

官方对象说明地址

二、多租户插件

2.1、作用

配置了多租户插件,可以实现:
1、数据插入时租户字段数据的自动插入
2、数据查询时自动添加租户字段的筛选条件

2.2、新增多租户插件配置

package com.xx.config;

import com.baomidou.mybatisplus.annotation.DbType;
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 net.sf.jsqlparser.expression.Expression;
import net.sf.jsqlparser.expression.LongValue;
import net.sf.jsqlparser.schema.Column;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import java.util.List;
import java.util.Objects;

/**
 * @author aqi
 * @date 2023/5/15 14:05
 */
@Configuration
public class MybatisPlusConfig {

    @Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor() {
        // 初始化Mybatis Plus拦截器
        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
        // 添加多租户插件拦截器
        interceptor.addInnerInterceptor(tenantLineInnerInterceptor());
        // 添加分页插件拦截器
        interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.H2));
        return interceptor;
    }

    /**
     * 多租户插件
     * @return TenantLineInnerInterceptor
     */
    private TenantLineInnerInterceptor tenantLineInnerInterceptor() {
        TenantLineHandler tenantLineHandler = new TenantLineHandler() {
            @Override
            public Expression getTenantId() {
                // 获取租户 ID 值表达式,只支持单个 ID 值
                return new LongValue(1111);
            }

            @Override
            public String getTenantIdColumn() {
                // 获取租户字段名,默认字段名叫: tenant_id
                return TenantLineHandler.super.getTenantIdColumn();
            }

            @Override
            public boolean ignoreTable(String tableName) {
                // 根据表名判断是否忽略拼接多租户条件(不虚要拼接多租户条件的表名称)
                return Objects.equals(tableName, "t_config");
            }

            @Override
            public boolean ignoreInsert(List<Column> columns, String tenantIdColumn) {
                // 忽略插入租户字段逻辑(如果插入数据事没有设置租户ID的值,那么这里会插入getTenantId方法返回的值)
                return TenantLineHandler.super.ignoreInsert(columns, tenantIdColumn);
            }
        };
        return new TenantLineInnerInterceptor(tenantLineHandler);
    }
}

2.3、编写测试用例

package com.xx;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.xx.domain.AirlinesInfo;
import com.xx.domain.TConfig;
import com.xx.service.AirlinesInfoService;
import com.xx.service.TConfigService;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;

import javax.annotation.Resource;
import java.util.List;

/**
 * @author aqi
 */
@SpringBootTest
public class PaginationTest {

    @Resource
    private AirlinesInfoService airlinesInfoService;

    @Resource
    private TConfigService tConfigService;

    /**
     * 测试多租户配置是否生效
     */
    @Test
    void test() {
        Page<AirlinesInfo> page = new Page<>(1, 5);
        Page<AirlinesInfo> pageList = airlinesInfoService.page(page);
        List<AirlinesInfo> list = pageList.getRecords();
        list.forEach(System.out::println);
    }

    /**
     * 测试配置了不进行多租户控制的条件是否生效
     */
    @Test
    void notTenantTest() {
        Page<TConfig> page = new Page<>(1, 5);
        Page<TConfig> pageList = tConfigService.page(page);
        List<TConfig> list = pageList.getRecords();
        list.forEach(System.out::println);
    }

    /**
     * 测试不添加租户字段值的时候,会不会自动封装租户属性
     */
    @Test
    void ignoreInsertTest() {
        AirlinesInfo airlinesInfo = new AirlinesInfo();
        airlinesInfo.setAddress("合肥");
//        airlinesInfo.setTenantId(2);
        airlinesInfoService.save(airlinesInfo);
    }
}

2.4、测试用例执行结果

测试多租户配置是否生效
测试配置了不进行多租户控制的条件是否生效
测试不添加租户字段值的时候,会不会自动封装租户属性

三、其他插件

这里只列举了2个常用插件,其他官方插件可以看官方文档

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

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

相关文章

IT项目管理工具推荐:选择最适合你的优秀工具

国际数据公司的一份报告指出&#xff0c;25%的IT项目彻底失败&#xff0c;这还不包括需要返工的50%的项目&#xff0c;也不包括20-25%未能提供投资回报的项目。众所周知&#xff0c;管理IT项目有很多挑战。以下是最常见的挑战&#xff1a; 1.学习曲线大 挑战&#xff1a; 由于I…

c#与NPOI

简介 操作指南 某些API参考 视频讲解 完整代码 1、简介 NPOI是源于一个用于读取xls,doc,ppt文档的POI 项目&#xff0c;POI是Java项目&#xff0c;后面因为有.Net的市场&#xff0c;于是将POI移植到.Net上。Npoi 可以在没有安装Office 的情况写 对 Word 或 Excel 文档进行读写…

《如何向ChatGPT提问并获得高质量的答案》—Prompt技术的完整指南

本教程收集于:AIGC从入门到精通教程 目录 第1章:提示工程技术简介 第2章:说明提示技术(Instructions Prompt Technique)

OpenPCDet系列 | 5.3 PointPillars算法——BaseBEVBackbone伪图像特征提取模块

文章目录 BaseBEVBackbone模块1. BaseBEVBackbone初始化2. BaseBEVBackbone前向传播 OpenPCDet的整个结构图&#xff1a; BaseBEVBackbone模块 在进行了bev视图的特征转换后&#xff0c;随后进行backbone2d模块进行进一步的特征处理&#xff0c;在PointPillars中选择的是Bas…

AI绘画小程序开发流程

最近市场上出现了很多AI绘画的小程序和APP&#xff0c;这些小程序使用起来非常方便&#xff0c;用户体验也不错&#xff0c;可以解决一部分用户的实际需求。今天和大家分享如何开发一个AI类的绘画小程序以及要注意的问题&#xff0c;希望对大家有所帮助。北京木奇移动技术有限公…

电脑蓝屏怎么U盘重装系统详细图文教学

电脑蓝屏怎么U盘重装系统详细图文教学。很多用户遇到电脑蓝屏的问题之后&#xff0c;不懂怎么去进行问题的解决。蓝屏问题其实自己制作一起启动盘就可以轻松的解决问题了。一起来看看以下的详细处理方法分享吧。 准备工作&#xff1a; 1、U盘一个&#xff08;尽量使用8G以上的U…

如何获取和制作免费的icon图标素材

icon 图标在界面设计中虽然占比不大&#xff0c;但却是不可缺少的设计元素之一。设计师通过 icon 图标&#xff0c;将抽象的概念通俗化&#xff0c;降低用户理解某个操作的难度。而设计师也会通过改变 icon 图标的样式来展现整体界面的视觉效果。icon 图标的风格有很多&#xf…

Linux gdb调试

使用gdb进行调试 我们将使用GNU的调试器gdb调试这个程序。gdb是一个功能很强大的调试器&#xff0c;它是一个自由软件&#xff0c;能够用在许多UNIX平台上。它同时也是Linux系统中的默认调试器。gdb已被移植到许多其他的计算机平台上&#xff0c;并且能够用于调试嵌入式实时系统…

(转载)从0开始学matlab(第6天)—数据文件与运算

1数据文件 有许多的方法用于加载和保存 MATLAB 的数据文件&#xff0c;这些方法后面进行介绍。在这里我们只向大家介绍最简单的 save 和 load 命令。 save 命令用于保存当前 MATLAB 工作区内的数据到一个硬盘文件。这个命令的基本形式如下 save filename var1 var2 var3 …

《拥抱AGI时代,电信日前省级电信公司的一次“非电信”培训》

数字信息基础设施是数字中国的关键底座&#xff0c;打通数字基础设施大动脉&#xff0c;建设数字中国成为推进中国式现代化的重要引擎。作为算力时代的探险家&#xff0c;出海浪潮的逐浪人&#xff0c;中国电信正全面融入数字经济建设大局&#xff0c;展现出新发展新格局下央企…

飞凌嵌入式技术帖——i.MX9352的GPIO怎么用?

之前小编为大家介绍过在飞凌嵌入式i.MX6ULL开发板上操作GPIO的方法。本期&#xff0c;让我们一起走近i.MX9352处理器&#xff0c;深入了解这位i.MX系列新成员的GPIO该如何操作&#xff0c;以及它与前辈i.MX6ULL处理器又有哪些异同。 01 硬件原理分析 以点灯和按键为例&#xf…

也谈零基础学编程,需要学什么

也谈零基础学编程&#xff0c;需要学什么 零基础人群语法1、注释2、变量2.1 变量命名2.2 数据类型2.3 类型强度 3、 运算符4、流程控制与代码块5、函数和方法6、类 算法学会使用第三方库小结 零基础人群 现在开发语言各种各样&#xff0c;越来越多&#xff0c;尤其是 python &…

算法训练-双指针

双指针 同向双指针3. 无重复字符的最长子串209. 长度最小的子数组713. 乘积小于 K 的子数组 相向双指针167. 两数之和 II - 输入有序数组15. 三数之和438. 找到字符串中所有字母异位词 滑动窗口接雨水 同向双指针 3. 无重复字符的最长子串 题目链接 class Solution { public:…

09——svg中path的使用

一、path 是 svg 中最强大的图形 用于定义一个 路径所有命令均允许小写字母。大写 表示绝对定位&#xff0c;小写 表示 相对定位 &#xff08;相对于上一个结束的坐标&#xff09;d 属性中包含所有路径的点&#xff0c;可根据命令缩写 自由组合 命令 名称 …

阿里云备案服务码是什么?备案服务码申请及限制说明

阿里云备案服务码是什么&#xff1f;ICP备案服务码怎么获取&#xff1f;阿里云备案服务码分为免费和付费两种&#xff0c;申请备案服务码是有限制条件的&#xff0c;需要你的阿里云账号下有可用于申请备案服务码的云产品&#xff0c;如云服务器、建站产品、虚拟主机等&#xff…

【刷题之路Ⅱ】LeetCode 475. 供暖器

【刷题之路Ⅱ】LeetCode 475. 供暖器 一、题目描述二、解题1、方法1——排序后二分法1.1、思路分析1.2、代码实现 2、方法2——排序后双指针2.1、思路分析2.2、代码实现 一、题目描述 原题连接&#xff1a; 475. 供暖器 题目描述&#xff1a; 冬季已经来临。 你的任务是设计一…

怎样能把两张照片拼成一张图片,5种工具分享

怎样能把两张照片拼成一张图片&#xff1f;图片拼合的应用场景是很多的。比如将几张相册中的照片拼成一张合影、将多个地图截图拼合在一起形成一个更大的区域地图、将多个漫画图像合并成一本漫画册等。这项技术可以方便地将多张图片整合为一张&#xff0c;节省时间和精力。 因此…

ThinkPHP6布局的方式之模板布局,全局配置方式,模板标签方式,动态方法布局

ThinkPHP6布局的方式之模板布局 ThinkPHP的模板引擎内置了布局模板功能支持&#xff0c;可以方便的实现模板布局以及布局嵌套功能。 有三种布局模板的支持方式&#xff1a;全局配置方式&#xff0c;模板标签方式&#xff0c;动态方法布局。 第一种方式&#xff1a;全局配置方…

有价值项目分享,缺项目可直接搜索(持续更新中)

​近来统计一下最近发的一些资源&#xff0c;包括CSDNB站微信公众号三个平台&#xff0c;仅包括Java资源&#xff08;SSMSpringBootuniapp&#xff09;、部分硬件、安卓资源&#xff0c;一共30758492588275个&#xff0c;可覆盖95%的毕业题目&#xff0c;大家可在相关归档内获取…

2023 年破解 PDF 密码的 5 种最佳方法

世界越来越依赖数字文档和信息存储。最流行和广泛使用的数字文档文件格式之一是便携式文档格式 (PDF)。PDF 文件用途广泛、可靠&#xff0c;并提供高级别的安全性以保护敏感信息免遭未经授权的访问。保护 PDF 的一种常用方法是通过密码保护。在这篇博文中&#xff0c;我们将讨论…