mybatisplus介绍以及使用(下)

news2024/11/16 11:35:29

目录

一、mybatisplus扩展功能

1、代码生成

1.1 安装插件

1.2 使用

 2、逻辑删除

二、插件功能

1、分页插件

2、示例


写在前面:

        在上篇的mybatisplus中介绍到了其概念,其中包括了什么是mybatisplus以及已经有了mybatis但是我们为什么使用它,介绍到了他给我们带来的便利之处(本篇会继续讲解mybatisplus的功能),还介绍到了安装以及一些常用的注解和条件构造器(很重要),那就继续开启新篇章吧!上篇文章入口。

一、mybatisplus扩展功能

1、代码生成

在使用MybatisPlus以后,基础的MapperServicePO代码相对固定,重复编写也比较麻烦。因此MybatisPlus官方提供了代码生成器根据数据库表结构生成POMapperService等相关代码。只不过代码生成器同样要编码使用,也很麻烦。

这里推荐大家使用一款MybatisPlus的插件,它可以基于图形化界面完成MybatisPlus的代码生成,非常简单。

1.1 安装插件

Idea的plugins市场中搜索并安装MyBatisPlus插件:

 然后重启你的idea即可使用

1.2 使用

对于一些比较重要的数据,我们往往会采用逻辑删除的方案,即:

  • 在表中添加一个字段标记数据是否被删除

  • 当删除数据时把标记置为true

  • 查询时过滤掉标记为true的数据

一旦采用了逻辑删除,所有的查询和删除逻辑都要跟着变化,非常麻烦。为了解决这个问题,MybatisPlus就添加了对逻辑删除的支持。

注意,只有MybatisPlus生成的SQL语句才支持自动的逻辑删除,自定义SQL需要自己手动处理逻辑删除。

首先要准备一张数据库的表(注意:需要是一个没有编写三层架构的表不然就不能体现到这款插件的魅力了),然后在菜单栏找到此处

 在弹出的窗口中填写数据库连接的基本信息

 

点击OK保存。

然后再次点击Idea顶部菜单中的other,然后选择Code Generator:

 在弹出的表单中填写信息:

 最终,代码自动生成到指定的位置了:

 2、逻辑删除

对于一些比较重要的数据,我们往往会采用逻辑删除的方案,即:

  • 在表中添加一个字段标记数据是否被删除

  • 当删除数据时把标记置为true

  • 查询时过滤掉标记为true的数据

一旦采用了逻辑删除,所有的查询和删除逻辑都要跟着变化,非常麻烦。为了解决这个问题,MybatisPlus就添加了对逻辑删除的支持。

要实现逻辑删除其实也很简单,首先需要在数据库表中新增一个逻辑删除的字段,接着要在其对应的实体类中新增逻辑删除的字段对应的属性,接着需要在yaml文件中做如下配置

mybatis-plus:

  global-config:

     db-config:

       ogic-delete-field: deleted # 全局逻辑删除的实体字段名(since 3.3.0,配置后可以忽略不配置步骤2)

       logic-delete-value: 1 # 逻辑已删除值(默认为 1)

       logic-not-delete-value: 0 # 逻辑未删除值(默认为 0)

开启了逻辑删除功能以后,我们就可以像普通删除一样做CRUD,基本不用考虑代码逻辑问题。还是非常方便的。

但是有一点需要注意:逻辑删除只有MybatisPlus生成的SQL语句才支持自动的逻辑删除,自定义SQL需要自己手动处理逻辑删除。

注意

逻辑删除本身也有自己的问题,比如:

  • 会导致数据库表垃圾数据越来越多,从而影响查询效率

  • SQL中全都需要对逻辑删除字段做判断,影响查询效率

因此,我不太推荐采用逻辑删除功能,如果数据不能删除,可以采用把数据迁移到其它表的办法。

二、插件功能

1、分页插件

MybatisPlus提供了很多的插件功能,进一步拓展其功能。目前已有的插件有:

  • PaginationInnerInterceptor:自动分页

  • TenantLineInnerInterceptor:多租户

  • DynamicTableNameInnerInterceptor:动态表名

  • OptimisticLockerInnerInterceptor:乐观锁

  • IllegalSQLInnerInterceptor:sql 性能规范

  • BlockAttackInnerInterceptor:防止全表更新与删除

注意:

使用多个分页插件的时候需要注意插件定义顺序,建议使用顺序如下:

  • 多租户,动态表名

  • 分页,乐观锁

  • sql 性能规范,防止全表更新与删除

这里我们以分页插件为里来学习插件的用法。如果想要了解其他插件请前往官网自行了解。

在未引入分页插件的情况下,MybatisPlus是不支持分页功能的,IServiceBaseMapper中的分页方法都无法正常起效。

所以,我们必须配置分页插件。

首先在项目中新建一个配置类:

 其代码如下:

package com.itheima.mp.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;
@Configuration
public class MybatisConfig {
    @Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor() {
        // 初始化核心插件
        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
        // 添加分页插件
        interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
        return interceptor;
    }
}

配置完成之后就可以使用mybatisplus中提供的分页功能了

2、示例

编写一个分页查询的测试:

@Test
void testPageQuery() {
    // 1.分页查询,new Page()的两个参数分别是:页码、每页大小
    Page<User> p = userService.page(new Page<>(2, 2));
    // 2.总条数
    System.out.println("total = " + p.getTotal());
    // 3.总页数
    System.out.println("pages = " + p.getPages());
    // 4.数据
    List<User> records = p.getRecords();
    records.forEach(System.out::println);
}

使用提供的分页插件功能之前需要先提供一个page对象,其中封装的有当前页码,每页大小,还有分页结果的排序条件,全部封装完之后调用mybatisplus提供的分页方法然后将分页对象传入进去即可,此处直接在参数部分new了一个page对象未指定排序字段以及排序规则。

运行结果如下:

 从运行结果中的sql语句中可以看出mybaitsplus帮我们拼接了limit分页条件

如果想要指定排序方法以及指定字段可以参考以下方法

int pageNo = 1, pageSize = 5;
// 分页参数
Page<User> page = Page.of(pageNo, pageSize);
// 排序参数, 通过OrderItem来指定
page.addOrder(new OrderItem("balance", false));
userService.page(page);

orderItem即是封装排序字段以及指定升序还是降序的对象、此处指定排序字段为balance且为降序排列。

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

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

相关文章

【MySQL内置数据库】information_schema

MySQL8.0.37 统计 1 ADMINISTRABLE_ROLE_AUTHORIZATIONS 2 APPLICABLE_ROLES 3 CHARACTER_SETS 提供了关于可用字符集的信息 4 CHECK_CONSTRAINTS 5 COLLATIONS 提供了关于字符集的排序规则的信息 6 COLLATION_CHARACTER_SET_APPLICABILITY 7 COLUMNS …

基于JAVA+SpringBoot+Vue的医院后台管理系统

基于JAVASpringBootVue的医院后台管理系统 前言 ✌全网粉丝20W,csdn特邀作者、博客专家、CSDN[新星计划]导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末附源码下载链接&#x1f345; 哈…

Redis 消息队列

认识消息队列 消息队列&#xff08;Message Queue&#xff09;字面意思就是存放消息的队列&#xff0c;最简单的消息队列模型包括 3 个角色 消息队列&#xff1a;存储和管理消息&#xff0c;也被称为消息代理&#xff08;Message Broker&#xff09; 生产者&#xff1a;发送消…

游戏开发2025年最新版——八股文面试题(unity,虚幻,cocos都适用)

1.静态合批与动态合批的原理是什么&#xff1f;有什么限制条件&#xff1f;为什么&#xff1f;对CPU和GPU产生的影响分别是什么&#xff1f; 原理&#xff1a;Unity运行时可以将一些物体进行合并&#xff0c;从而用一个描绘调用来渲染他们&#xff0c;就是一个drawcall批次。 限…

【day20240925】常见数据集科普

文章目录 常见数据集Fashion-MNISTCIFAR-10CIFAR-100IMDbTiny Imagenet 常见数据集 Fashion-MNIST CIFAR-10 CIFAR-100 IMDb Tiny-ImageNet Fashion-MNIST Fashion-MNIST数据集涵盖了来自 10 种类别的共 7 万个不同商品的正面图片。它的大小、格式和训练集 / 测试集划分与原…

pycharm 使用 translation 插件通过openai进行翻译

pycharm 使用 translation 插件通过openai进行翻译 1. 安装插件2. 配置插件3. 翻译 1. 安装插件 2. 配置插件 3. 翻译 调用 openai 时使用的提示词如下&#xff1a; <|im_start|>system\nYou are a translation engine that can only translate text and cannot interpr…

WebSocket实现在线聊天室

项目实现源码&#xff1a; 前端源码 后端源码 1.常见的消息推送方式 1.1 轮询 1.1.1 轮询的概念 客户端以固定的事件间隔&#xff08;例如每秒或几分钟&#xff09;向服务器发送HTTP请求&#xff0c;服务器收到请求后&#xff0c;处理请求并返回数据给客户端 轮询具体实现htt…

Redis的一些数据类型(一)

&#xff08;一&#xff09;数据类型 我们说redis是key value键值对的方式存储数据&#xff0c;key是字符串&#xff0c;而value是一些数据结构,那今天就来说一下value存储的数据。 我们数据结构包含&#xff0c;String&#xff0c;hash&#xff0c;list&#xff0c;set和zest但…

SegFormer网络结构的学习和重构

因为太多的博客并没有深入理解,本文是自己学习后加入自己深入理解的总结记录&#xff0c;方便自己以后查看。 segformer中encoder、decoder的详解。 学习前言 一起来学习Segformer的原理,如果有用的话&#xff0c;请记得点赞关注哦。 一、Segformer的网络结构图 网络结构&…

反转字符串 II--力扣541

反转字符串 II 题目思路代码 题目 思路 本题的关键在于理解每隔 2k 个字符的前 k 个字符进行反转&#xff0c;剩余字符小于 2k 但大于或等于 k 个&#xff0c;则反转前 k 个字符。并且剩余字符少于 k 个&#xff0c;则将剩余字符全部反转。 让i每次跳2k&#xff0c;成为每一次…

Xshell 连接 VMware虚拟机操作 截图和使用

Xshell 连接 VMware虚拟机操作 文章目录 Xshell 连接 VMware虚拟机操作一、本机环境截图1.1配置 Xshell环境截图VWware 配置环境截图最后下载地址 一、本机环境截图 1.1配置 Xshell环境截图 VWware 配置环境截图 最后 下载地址 vmware https://www.vmware.com/ VMware总部位于…

电场(electric-field)

图中&#xff1a; Q 产生电场的正电荷&#xff08;可正可负&#xff0c;这里用正举例&#xff09;q 试验电荷&#xff0c;正电荷&#xff08;习惯上用正电荷&#xff09;p 试验电荷所在的位置&#xff08;即要测的电场强度的位置&#xff09;r 为电荷间的距离 r ^ \widehat{r}…

广州电影产业博览交易会将于本周五开始

“影动广州绽放世界”广州电影产业博览交易会由广州市人民政府主办&#xff0c;广州市委宣传部承办&#xff0c;将在广交会展馆A区4.2及5.2馆启幕。本届广州影博会聚焦电影产业交易、科技创新和消费市场&#xff0c;链接国内外电影资源&#xff0c;活动内容丰富。设置电影主题展…

MySQL Performance Schema 详解及运行时配置优化

引言 MySQL 的 Performance Schema 是一套性能监控与诊断工具&#xff0c;帮助开发者和数据库管理员收集、分析 MySQL 实例的运行状态&#xff0c;找出性能瓶颈并进行优化。通过 Performance Schema&#xff0c;我们能够监控不同的内部事件、线程、会话、语句执行等关键性能指…

Python批量合并365个工作表的2种方法

一、引言 小明刚进入到新公司&#xff0c;就被委以重任&#xff1a;将365个Excel文件中的英文表头修改为中文。传统方法是逐一打开每个文件&#xff0c;手动修改标题&#xff0c;然后保存&#xff0c;最后再合并。这种方法不仅耗时耗力&#xff0c;还容易出错。如果用Python就…

[大语言模型-论文精读] MoRAG - 基于多部分融合的检索增强型人体动作生成

MoRAG--Multi-Fusion Retrieval Augmented Generation for Human Motion KS Shashank, S Maheshwari, RK Sarvadevabhatla - arXiv preprint arXiv:2409.12140, 2024 MoRAG - 基于多部分融合的检索增强型人体动作生成 1. 目录 MoRAG--Multi-Fusion Retrieval Augmented Generat…

Redis:缓存

为什么要理解Redis缓存问题 在高并发的业务场景下&#xff0c;数据库大多数情况都是用户并发访问最薄弱的环节。所以&#xff0c;就需要使用redis做一个缓冲操作&#xff0c;让请求先访问到redis&#xff0c;而不是直接访问Mysql等数据库。这样可以大大缓解数据库的压力。 当…

【MySql】在ubuntu下安装MySql数据库

目录 查看操作系统版本 添加 MySql APT源 访问下载页面并下载发布包 安装发布包 执行安装命令 从MySql APT源更新包信息 安装MySql 执行安装命令 查看MySql状态 开启自启动 登录MySql 查看操作系统版本 rootVM-24-2-ubuntu:~# lsb_release -a No LSB modules are ava…

软考高级:需求工程- 4+1 视图 AI 解读

这几个术语常见于软件架构的描述中&#xff0c;它们分别代表软件系统的不同角度或视角。为了更好理解它们&#xff0c;我们可以把软件系统想象成一个公司&#xff0c;每个视图就像从不同角度观察这个公司的运作方式。 生活化例子 想象你在经营一家餐馆&#xff1a; 逻辑视图…

SSM+Vue共享单车管理系统

目录 1 项目介绍2 项目截图3 核心代码3.1 Controller3.2 Service3.3 Dao3.4 spring-mybatis.xml3.5 spring-mvc.xml3.5 Vue 4 数据库表设计5 文档参考6 计算机毕设选题推荐7 源码获取 1 项目介绍 博主个人介绍&#xff1a;CSDN认证博客专家&#xff0c;CSDN平台Java领域优质创作…