【MyBatis-Plus】常用的插件介绍(乐观锁、逻辑删除、分页)

🥳🥳Welcome Huihui's Code World ! !🥳🥳

接下来看看由辉辉所写的关于MyBatis-Plus的相关操作吧 

目录

🥳🥳Welcome Huihui's Code World ! !🥳🥳

一.为什么要使用MyBatis-Plus中的插件

二.MyBatis-Plus中常用的插件介绍及运用 

1.乐观锁

①基本介绍

②使用案例

数据库表添加 version 字段

实体类增加 version 属性,并添加 @Version 注解

配置乐观锁插件

测试

2.逻辑删除

①基本介绍

②使用案例

配置yml文件

实体类中添加逻辑删除字段

测试

3.分页

①基本介绍

②使用案例

配置分页插件

实现分页


一.为什么要使用MyBatis-Plus中的插件

 1.提高开发效率:这些插件提供了很多常用的功能,减少了开发人员编写重复代码的工作量,提高了开发效率。

2.提供了更强大的功能:插件增强了 MyBatis 的功能,例如分页、乐观锁、动态表名等,使开发更加便捷和灵活。

3.优化性能:插件可以帮助开发人员定位和优化 SQL 执行性能,提高系统的响应速度和并发能力。

4.提供了更好的安全性:一些插件如防止全表更新与删除插件,可以避免误操作导致数据丢失或损坏的风险

二.MyBatis-Plus中常用的插件介绍及运用 

1.乐观锁

①基本介绍

乐观锁是一种并发控制机制,用于解决多个用户同时对同一数据进行更新时可能出现的数据冲突问题。在乐观锁机制中,每条记录都会有一个版本号(或者称为时间戳)字段,用于标识数据的版本信息

②使用案例

数据库表添加 version 字段

默认是1

实体类增加 version 属性,并添加 @Version 注解

配置乐观锁插件
package com.wh.springboot.mybatisplus.config;

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

@Configuration
public class MyBatisPlusConfig {
    @Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor() {
        MybatisPlusInterceptor mybatisPlusInterceptor = new MybatisPlusInterceptor();
        //注册乐观锁插件
        mybatisPlusInterceptor.addInnerInterceptor(new OptimisticLockerInnerInterceptor());
        return mybatisPlusInterceptor;
    }
}

测试

  //测试乐观锁(成功)
    @Test
    public void demo(){
        //先查询,再修改
        OaUser oaUser = oaUserMapper.selectById(2L);
        oaUser.setName("小唐");
        oaUser.setPwd("123456");
        oaUserMapper.updateById(oaUser);
    }

如果两个人同时的去修改id为3的这条数据,那么它只会成功一次,因为他们拿到的都是version为1的,但是当一个修改之后,这个version就会+1,那么另外一个人再去修改的时候,它就无法修改了(已经没有version为1的那条数据了)

//测试乐观锁(失败)
    @Test
    public void demo2(){
        //线程1:
        OaUser oaUser1 = oaUserMapper.selectById(3L);
        oaUser1.setName("小东东");
        oaUser1.setPwd("123456");

        //线程2:(在线程1的修改操作未来得及执行时介入)
        OaUser oaUser2 = oaUserMapper.selectById(3L);
        oaUser2.setName("无语");
        oaUser2.setPwd("123456");
        oaUserMapper.updateById(oaUser2);

        //如果没有乐观锁就会覆盖插队线程的值!
        oaUserMapper.updateById(oaUser1);//更新失败
    }

2.逻辑删除

①基本介绍

逻辑删除是指在数据库中不是真正的删除数据记录,而是通过修改记录的状态值来达到“删除”的效果。通常情况下,我们会在每条数据记录中增加一个状态字段(如 is_deleted),用于标识该记录是否已被删除。当需要删除数据时,不再执行物理删除操作,而是将该记录的状态值修改为已删除状态,这样就可以保留该记录的历史信息,并且可以方便地恢复数据

②使用案例

配置yml文件
mybatis-plus:
  global-config:
    db-config:
      logic-delete-field: deleted # 全局逻辑删除的实体字段名
      logic-delete-value: 1       # 逻辑已删除值(默认为 1)
      logic-not-delete-value: 0   # 逻辑未删除值(默认为 0)
实体类中添加逻辑删除字段

测试
//逻辑删除
    @Test
    public void demo3(){
        //先使用deleteById删除对应的数据
        oaUserMapper.deleteById(1L);
    }


3.分页

①基本介绍

MyBatis-Plus 中的分页是一项用于数据库查询结果进行分页展示的功能。它能够将大量的查询结果按照指定的页面大小,分成多个页面进行展示,提高用户体验和系统性能

在使用MyBatis-Plus的时候,一定要确保自己没有引入其他的插件,不然会产生冲突

②使用案例

配置分页插件
package com.wh.springboot.mybatisplus.config;

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

@Configuration
public class MyBatisPlusConfig {
    @Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor() {
        MybatisPlusInterceptor mybatisPlusInterceptor = new MybatisPlusInterceptor();
        //注册乐观锁插件
        mybatisPlusInterceptor.addInnerInterceptor(new OptimisticLockerInnerInterceptor());
        //注册分页插件
        mybatisPlusInterceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
        return mybatisPlusInterceptor;
    }



}
实现分页
 @RequestMapping("/list")
    public Object list() {
        QueryWrapper<OaUser> wrapper =new QueryWrapper<>();
        //简单的分页查询
        Page<OaUser> page = new Page<>(1, 5);
        Page<OaUser> res = oaUserService.page(page, wrapper);
        res.getTotal();//数据总数
        res.getPages();//数据总页数
        return res.getRecords();
    }

这里面也可以添加分页的条件,下面这个图就是一些常见的可用条件

 好啦,今天的分享就到这了,希望能够帮到你呢!😊😊  

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

1. MongoDB快速实战与基本原理

1.MongoDB介绍 1.1 什么是MongoDB MongoDB是一个文档数据库&#xff08;以JSON 为数据模型&#xff09;&#xff0c;由C语言编写&#xff0c;旨在为WEB应用提供可扩展的高性能数据存储解决方案。 文档来自于“JSON Document”&#xff0c;并非我们一般理解的 PDF&#xff0c;…

【Qt图书管理系统】4.系统设计与详细设计

文章目录 核心流程图软件架构设计流程图软件开发类图及功能点 核心流程图 用户登录图书查询图书借阅图书归还账户管理 软件架构设计 流程图 软件开发类图及功能点 Dlg_Login 登录界面 Cell_Main 主窗体 Cell_MyBook 我的书籍 Cell_BookMgr 书籍管理 Cell_RecoredMgr 借阅记录…

cmd发生系统错误 5。的解决方法

我敲[net start mysql]命令时遇到如图报错&#xff0c;下面介绍解决方法&#xff0c;非常简单。 我们只需要更改打开cmd的方式&#xff0c;我之前直接敲WinR组合键&#xff0c;输入cmd命令打开的&#xff0c;不要这样做。我们输入“命令提示符”&#xff0c;然后选择“以管理员…

前后端分离开发

前期 前后端混合开发 后期 前后端分离开发

Windows11环境下配置深度学习环境(Pytorch)

目录 1. 下载安装Miniconda2. 新建Python3.9虚拟环境3. 下载英伟达驱动4. 安装CUDA版Pytorch5. CPU版本pytorch安装 1. 下载安装Miniconda 下载安装包&#xff1a;镜像文件地址 将Miniconda相关路径添加至系统变量的路径中。 打开Anaconda Powershell Prompt&#xff0c;输入…

亚马逊云科技re_Invent 2023产品体验:亚马逊云科技产品应用实践 王炸产品Amazon Q,你的AI助手

本篇文章授权活动官方亚马逊云科技文章转发、改写权&#xff0c;包括不限于在 亚马逊云科技开发者社区, 知乎&#xff0c;自媒体平台&#xff0c;第三方开发者媒体等亚马逊云科技官方渠道 意料之中 2023年9月25日&#xff0c;亚马逊宣布与 Anthropic 正式展开战略合作&#x…

联想王传东:AI PC迈入AI Ready 即将开启AI On

“AI PC已经正式迈入AI Ready 阶段&#xff0c;接下来会逐渐进入到AI On阶段。”12月16日&#xff0c;英特尔人工智能创新应用大赛启动仪式在深圳举办。作为独家AI PC合作伙伴&#xff0c;联想集团副总裁、中国区首席市场官王传东代表公司出席仪式并致辞。 王传东认为AI PC的发…

workflow系列教程(4)Parallel并联任务流

往期教程 如果觉得写的可以,请给一个点赞关注支持一下 观看之前请先看,往期的博客教程,否则这篇博客没办法看懂 workFlow c异步网络库编译教程与简介 C异步网络库workflow入门教程(1)HTTP任务 C异步网络库workflow系列教程(2)redis任务 workflow系列教程(3)Series串联任务流…

Web API——Performance属性了解和使用

性能监控一直是前端的一个重点工作&#xff0c;本文介绍在做性能监控时&#xff0c;必须要了解的一个Web API——performance&#xff0c;主要了解它的的属性和使用。 一、window.performance 1、Performance 是一个标准&#xff0c;用于解决开发者在浏览器中获取性能数据的问…

mysql原理--InnoDB的表空间

1.概述 通过前边儿的内容大家知道&#xff0c; 表空间 是一个抽象的概念。 对于系统表空间来说&#xff0c;对应着文件系统中一个或多个实际文件&#xff1b;对于每个独立表空间来说&#xff0c;对应着文件系统中一个名为 表名.ibd 的实际文件。可以把表空间想象成被切分为许许…

navicat连接mysql报错过程以及解决

1.刚开始报错如下图 于是我利用这段报错信息&#xff08;2059 - Authentication plugin caching sha2 password cannot be loaded&#xff09;百度。 1.1上面报错的原因和解决过程 百度说是mysql的加密方式不对&#xff0c;如下图 所以这里进入数据库&#xff0c;修改mysql这…

【C++数据结构 | 哈希表速通】哈希表完成英汉词典增删改查 | 哈希表实现类型unordered_map详解

哈希表 by.Qin3Yu ps.本文的哈希表特指unordered_map实现类型 文中所有代码默认已使用std命名空间且已导入部分头文件&#xff1a; #include <iostream> #include <unordered_map> using namespace std;概念速览 什么是键值对&#xff1f; 所谓 键值对&#xf…

图扑物联 | WEB组态可视化软件

什么是组态&#xff1f; 组态的概念来自于20世纪70年代中期出现的第一代集散控制系统&#xff08;Distributed Control System&#xff09;&#xff0c;可理解为“配置”、“设置”等&#xff0c;是指通过人机开发界面&#xff0c;用类似“搭积木”的简单方式来搭建软件功能&a…

数据可视化---饼图、环形图、雷达图

类别内容导航机器学习机器学习算法应用场景与评价指标机器学习算法—分类机器学习算法—回归机器学习算法—聚类机器学习算法—异常检测机器学习算法—时间序列数据可视化数据可视化—折线图数据可视化—箱线图数据可视化—柱状图数据可视化—饼图、环形图、雷达图统计学检验箱…

云服务器部署vue/node项目

此处以阿里云服务器为例&#xff0c;配置的是LNMP环境 vue部署云服务器&#xff1a; 以阿里云服务为例&#xff0c;端口自定义99 1、在 /usr/share/nginx/html/ 该目录下新建文件夹&#xff0c;该文件夹是部署的打好包的前端项目 例&#xff1a; 2、进入nginx目录配置相关配…

html+css+javascript实现渐隐轮播

实现效果&#xff1a; 图片自动轮播&#xff0c;点击左右按钮会操作图片向前或向后&#xff0c;图片与小圆点相互呼应&#xff0c;具有交互效果。 编写思想&#xff1a; 实现交互时使用了排他思想&#xff0c;同选项卡的功能&#xff1b; 自动轮播采用了setInterval()&#…

C++ summary 工具 Insights: 源码工具:应用篇 inline函数

介绍篇 在线执行 悬停&#xff0c;显示帮助 右键&#xff0c;查看文档 template example_1 int main(){int a 123;return 0; }(gdb) disas Dump of assembler code for function main():0x0000555555555129 <0>: endbr64 0x000055555555512d <4>: push …

2023年【陕西省安全员C证】新版试题及陕西省安全员C证复审模拟考试

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 陕西省安全员C证新版试题参考答案及陕西省安全员C证考试试题解析是安全生产模拟考试一点通题库老师及陕西省安全员C证操作证已考过的学员汇总&#xff0c;相对有效帮助陕西省安全员C证复审模拟考试学员顺利通过考试。…

C#有望成为2023年的编程语言之王

前言 TIOBE 2023年12月编程语言指数头条新闻&#xff1a;C#有望成为2023年的编程语言之王。 TIOBE是什么&#xff1f; 访问地址&#xff1a;https://www.tiobe.com/tiobe-index/ TIOBE是一个编程社区指数&#xff0c;用于衡量不同编程语言的受欢迎程度。TIOBE指数基于全球范围…

接口自动化测试框架【AIM】

最近在做公司项目的自动化接口测试&#xff0c;在现有几个小框架的基础上&#xff0c;反复研究和实践&#xff0c;搭建了新的测试框架。利用业余时间&#xff0c;把框架总结了下来。 AIM框架介绍 AIM&#xff0c;是Automatic Interface Monitoring的简称&#xff0c;即自动化…