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

news2024/11/22 22:18:59

🥳🥳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.coloradmin.cn/o/1317999.html

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

相关文章

day01-报表技术POI

前言 报表[forms for reporting to the higher organizations]&#xff0c;就是向上级报告情况的表格。简单的说&#xff1a;报表就是用表格、图表等格式来动态显示数据&#xff0c;可以用公式表示为&#xff1a;“报表 多样的格式 动态的数据”。 1、开发环境搭建 功能说…

SQLMAP的使用(rails 为例)

1.启动一个项目&#xff0c;例如rails学习的项目&#xff0c;修改config/database.yml&#xff0c; 假设来一个接口&#xfeff; class YourModel::YourController < ApplicationController def test_sqlisql "select * from your_table_name where id " par…

鸿蒙开发组件之Web

一、加载一个url myWebController: WebviewController new webview.WebviewControllerbuild() {Column() {Web({src: https://www.baidu.com,controller: this.myWebController})}.width(100%).height(100%)} 二、注意点 2.1 不能用Previewer预览 Web这个组件不能使用预览…

配置Nginx解决跨域问题

Nginx 中将前端请求中的所有以 “/apiUrl” 开头的路径代理到 http://192.12.200.101:9813 例如&#xff1a; /apiUrl/login > http://192.12.200.101:9813/login 配置nginx环境 进入Nginx 的配置文件编辑界面: sudo nano /etc/nginx/conf.d/default.conf开始编辑 defaul…

7.26 SpringBoot项目实战【还书】

文章目录 前言一、编写控制器二、编写服务层三、Git提交前言 本文是项目实战 业务接口 的最后一篇,上文 曾说过【还书】的 入口是【我的借阅记录】,因为【还书】是基于一次借阅记录而言,另外在4.2 数据库设计 曾分析过【还书】的业务场景,需要执行两步操作: 更新【借阅记…

汽车线束行业MES的解决方案

MES系统在汽车线束生产全流程中扮演着重要角色。它通过采用自动化、信息化、以及集成化的方式&#xff0c;实现了对整个生产过程的精细化管理。在复杂且严格的汽车零部件制造业中&#xff0c;MES系统无疑为高效、高质量的生产提供了坚实保障。 万界星空科技线束行业MES系统主要…

【开源项目】WPF 扩展 -- 多画面视频渲染组件

目录 1、项目介绍 2、组件集成 2.1 下载地址 2.2 添加依赖 3、使用示例 3.1 启动动画 3.2 视频渲染 3.3 效果展示 4、项目地址 1、项目介绍 Com.Gitusme.Net.Extensiones.Wpf 是一款 Wpf 扩展组件。基于.Net Core 3.1 开发&#xff0c;当前是第一个发布版本 1.0.0&am…

(3)kylin系统部署weblogic项目

一、jdk迁移 1、拷贝成功后要配置环境变量 vi /etc/profile 将jdk的目录添加进去 2、将jdk安装目录拷贝后权限会发生变化&#xff0c; 要对jdk下bin目录中的所有文件修改权限&#xff1a; chmod x ./* 回车即可 ----------------------------- 环境变量 export …

【漏洞复现】红帆OA iorepsavexml.aspx文件上传漏洞

漏洞描述 广州红帆科技深耕医疗行业20余年,专注医院行政管控,与企业微信、阿里钉钉全方位结合,推出web移动一体化办公解决方案——iOffice20(医微云)。提供行政办公、专业科室应用、决策辅助等信息化工具,采取平台化管理模式,取代医疗机构过往多系统分散式管理,实现医…

Kafka本地安装⭐️(Windows)并测试生产消息以及消费消息的可用性

2023.12.17 天气晴 温度较低 十点半&#xff0c;不是不想起实在是阳光浴太nice了日常三连&#xff0c;喂&#xff0c;刷&#xff0c;肝刷会儿博客&#xff0c;看会儿设计模式冷冷冷 进被窝 刷视频 睡觉看看kafka的本地部署 》》实践》》成功写会儿博客&#xff0c…

Qt for Android 程序编译报错

环境 系统&#xff1a;Ubuntu Qt 版本&#xff1a;Qt5.15.2 JDK版本:jdk-17.0.9 编译错误说明 Qt 创建了一个简单的界面程序&#xff0c;编辑就错误了. 错误信息&#xff1a; Generating Android PackageInput file: /home/xuguijun/Desktop/build-androidTest-Android_Q…

通过 Dropout 增强深度学习模型:对抗过度拟合的策略

一、介绍 Dropout 是深度学习中用于防止过度拟合的正则化技术。这个概念是由 Hinton 等人提出的。在 2012 年的一篇论文中&#xff0c;它已成为神经网络领域的主要技术&#xff0c;特别是在训练深度网络方面。 在追求稳健的深度学习模型的过程中&#xff0c;dropout 不仅作为一…

C语言—每日选择题—Day50

一天一天的更新&#xff0c;也是达到50天了&#xff0c;精选的题有250道&#xff0c;博主累计做了不下500道选择题&#xff0c;最喜欢的题型就是指针和数组之间的计算呀&#xff0c;不知道关注我的小伙伴是不是一直在坚持呢&#xff1f;文末有投票&#xff0c;大家可以投票让博…

GradNorm理解

主要参考这一篇&#xff0c;GradNorm&#xff1a;Gradient Normalization for Adaptive Loss Balancing in Deep Multitask Networks&#xff0c;梯度归一化_grad norm-CSDN博客 14:20-15:30 提前需要理解的概念 损失函数&#xff0c;衡量ypred与ytruth的差距。 Grad Loss定…

《Linux C编程实战》笔记:文件的移动和删除

本节只有两个函数。 rename函数 #include <stdio.h> int rename (const char *oldpath, const char *newpath); rename会将参数oldpath所指定的文件名称改为参数newpath所指定的文件名称&#xff0c;若newpath所指定的文件已存在&#xff0c;则原文件会被删除&#xf…

Mac安装软件显示文件已损坏处理方法

今天安装软件&#xff0c;突然遇到了文件已损坏&#xff0c;扔到废纸篓的情况&#xff0c;于是搜索了下解决办法&#xff0c;跟大家分享下&#xff0c;希望对你有所帮助 一、检查安全性设置 打开【设置】-【隐私与安全】&#xff0c;下拉找到安全性&#xff0c;将安全性更改为…

深度学习记录--参数与超参数

什么是超参数 在深度学习的神经网络图中&#xff0c;有一堆参数&#xff0c;这些参数分成了普通参数和特殊参数&#xff0c;其中特殊参数往往被称为超参数 超参数(hyper parameters),在某种程度上决定了普通的参数&#xff0c;并且是需要额外给出的 如下图 参数设定 对于超…

半导体设备之外延炉简述

半导体设备对整个半导体行业起着重要的支撑作用。因半导体制造工艺复杂&#xff0c;各个环节需要的设备也不同&#xff0c;从流程工序分类来看&#xff0c;半导体设备主要可分为晶圆制造设备&#xff08;前道工序&#xff09;、封装测试设备&#xff08;后道工序&#xff09;等…

【TB作品】51单片机读取重量和液位,OLED显示

代码打开下载&#xff1a; http://dt4.8tupian.net/2/28880a64b6666.pg3这段代码是为微控制器编写的&#xff0c;可能是基于8051架构&#xff0c;使用Keil C51编译器。该代码结合了OLED显示器、超声波距离传感器和基于HX711的称重传感器的功能。以下是主要组件及其功能的详细说…

常见Appium相关问题及解决方案

问题1&#xff1a;adb检测不到设备 解决&#xff1a; 1.检查手机驱动是否安装&#xff08;win10系统不需要&#xff09;&#xff0c;去官网下载手机驱动或者电脑下载手机助手来辅助安装手机驱动&#xff0c;安装完成后卸载手机助手&#xff08;防止接入手机时抢adb端口造成干…