【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 {@Beanpublic MybatisPlusInterceptor mybatisPlusInterceptor() {MybatisPlusInterceptor mybatisPlusInterceptor = new MybatisPlusInterceptor();//注册乐观锁插件mybatisPlusInterceptor.addInnerInterceptor(new OptimisticLockerInnerInterceptor());return mybatisPlusInterceptor;} }测试
//测试乐观锁(成功)@Testpublic void demo(){//先查询,再修改OaUser oaUser = oaUserMapper.selectById(2L);oaUser.setName("小唐");oaUser.setPwd("123456");oaUserMapper.updateById(oaUser);}
如果两个人同时的去修改id为3的这条数据,那么它只会成功一次,因为他们拿到的都是version为1的,但是当一个修改之后,这个version就会+1,那么另外一个人再去修改的时候,它就无法修改了(已经没有version为1的那条数据了)
//测试乐观锁(失败)@Testpublic 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)实体类中添加逻辑删除字段
测试
//逻辑删除@Testpublic 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 {@Beanpublic 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();}
这里面也可以添加分页的条件,下面这个图就是一些常见的可用条件
好啦,今天的分享就到这了,希望能够帮到你呢!😊😊
相关文章:
【MyBatis-Plus】常用的插件介绍(乐观锁、逻辑删除、分页)
🥳🥳Welcome Huihuis Code World ! !🥳🥳 接下来看看由辉辉所写的关于MyBatis-Plus的相关操作吧 目录 🥳🥳Welcome Huihuis Code World ! !🥳🥳 一.为什么要使用MyBatis-Plus中的插…...
DApp测试网络Ganache本地部署并实现远程连接
文章目录 前言1. 安装Ganache2. 安装cpolar3. 创建公网地址4. 公网访问连接5. 固定公网地址 前言 Ganache 是DApp的测试网络,提供图形化界面,log日志等;智能合约部署时需要连接测试网络。 Ganache 是一个运行在本地测试的网络,通过结合cpol…...
好用的硬盘分区工具,傲梅分区助手 V10.2
傲梅分区助手软件可以帮助用户在硬盘上创建、调整、合并、删除分区,以及管理磁盘空间等操作。它可以帮助你进行硬盘无损分区操作。 支持系统 目前这款软件支持 Windows 7、Windows 8、Windows 10、Windows 11 等个人系统,还支持 Windows 2012/2016/2019…...
【华为鸿蒙系统学习】- HarmonyOS4.0开发|自学篇
🌈个人主页: Aileen_0v0 🔥热门专栏: 华为鸿蒙系统学习|计算机网络|数据结构与算法 💫个人格言:"没有罗马,那就自己创造罗马~" 目录 HarmonyOS 4.0 技术介绍: HarmonyOS三大特征: 1.实现硬件互助&#…...
Qt图像处理-Qt中配置OpenCV打开本地图片
本文讲解Qt中配置OpenCV过程并用实例展示如何使用OpenCV打开图片(windows环境下) 一、下载OpenCv 本文使用版本OpenCV-MinGW-Build-OpenCV-3.4.5 下载地址: https://codeload.github.com/huihut/OpenCV-MinGW-Build/zip/refs/heads/OpenCV-3.4.5 点击Code-local-Downlo…...
HTML中RGB颜色表示法和RGBA颜色表示法
Hi i,m JinXiang ⭐ 前言 ⭐ 本篇文章主要介绍HTML中RGB颜色表示法和RGBA颜色表示法以及部分理论知识 🍉欢迎点赞 👍 收藏 ⭐留言评论 📝私信必回哟😁 🍉博主收将持续更新学习记录获,友友们有任何问题可以…...
Openwrt源码下载出现“The remote end hung up unexpected”
最近项目原因需要下载openwrt21.02版本源码,花费了很多时间,找到正确方法后,发现可以节省很多时间,记录下过程,方便自己,可能方便他人。 一.问题阐述 openwrt21.02下载链接如下: git clone -…...
Spring定时任务动态更改(增、删、改)Cron表达式方案实例详解
Spring定时任务动态更改(增、删、改)Cron表达式方案实例详解 最近在做一个需求,用户可以在平台上配置任务计划数据(就是任务的执行和描述的相关信息,包括任务参数、cron表达式),配置后…...
常用登录加密之Shiro与Spring Security的使用对比
Shiro与Spring Security都是主流的身份认证和权限控制安全框架,Shiro偏向于前后端不分离平台,而Spring Security更偏向于前后端分离平台。接下来简单列一下两种登录验证的执行流程和示例,了解实际运用中的登录执行流程,然后重点剖…...
获取文件路径里的文件名(不包含扩展名)
“./abc/abc/llf.jpg” 写一个代码,让我获得“llf”这段字符串 import osfile_path "./abc/abc/llf.jpg" file_name os.path.splitext(os.path.basename(file_path))[0] print(file_name)在这个代码中,我们使用了os.path模块来处理文件路径…...
HiveSql语法优化二 :join算法
Hive拥有多种join算法,包括Common Join,Map Join,Bucket Map Join,Sort Merge Buckt Map Join等,下面对每种join算法做简要说明: Common Join Common Join是Hive中最稳定的join算法,其通过一个M…...
Leetcode—459.重复的子字符串【简单】
2023每日刷题(五十九) Leetcode—459.重复的子字符串 算法思想 巧解的算法思想 实现代码 从第一个位置开始到s.size()之前,看s字符串是否是ss的子串 class Solution { public:bool repeatedSubstringPattern(string s) {return (s s).fin…...
Mac安装Typora实现markdown自由
一、什么是markdown Markdown 是一种轻量级标记语言,创始人为约翰格鲁伯(John Gruber)。 它允许人们使用易读易写的纯文本格式编写文档,然后转换成有效的 XHTML(或者HTML)文档。这种语言吸收了很多在电子邮…...
前后端传参格式
前端发送 Serialize()方法 是指将一个抽象的JavaScript对象(数据结构)转换成字符串。这个字符串可以利用标准格式发送到服务器,被视为URL查询字符串或者POST数据,或者由于复杂的AJAX请求。这个方法使用的数据结构可以是JavaScri…...
【后端学前端】第三天 css动画 动态搜索框(定位、动态设置宽度)
1、学习信息 视频地址:css动画 动态搜索框(定位、动态设置宽度)_哔哩哔哩_bilibili 2、源码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>test3</title>…...
51.0/表单(详细版)
目录 51.1 输入元素 input 51.1.1 文本域 51.1.2 密码输入框 51.1.3 单选框 51.1.4 复选框 51.1.5 提交按钮 51.1.6 重置按钮 51.1.7 普通按钮 51.1.8 图片按钮 51.1.9 隐藏域 51.1.10 文件域 51.2 多行文本框 51.3 下拉列表框 51.4 表单的综合示例 表单是网页中…...
动态规划(Dynamic Programming)
动态规划(Dynamic Programming):是运筹学的一种最优化方法,只不过在计算机问题上应用比较多 DP常见步骤: 暴力递归/穷举记忆化搜索(傻缓存 递归),使用备忘录/ DP Table 来优化穷举过程严格表结…...
linux使用文件描述符0、1和2来处理输入和输出
文件描述符012 在Linux中,文件描述符0、1和2分别代表标准输入(stdin)、标准输出(stdout)和标准错误(stderr)。它们用于处理进程的输入和输出。 文件描述符0(stdin)&…...
how to write and run .ps1
use .txt filechange the suffix to .ps1 from .txt 3)how to run .ps1 3.1) PS D:> .\test.ps1 1 2 3 4 5 6 7 8 9 10 3.2) PS D:> tes then press tab key to compensate and complete the whole file name...
如何在PHP中处理跨域请求?
在 PHP 中处理跨域请求(CORS,Cross-Origin Resource Sharing),通常需要在服务器端设置相应的 HTTP 头,以允许来自其他域的请求。以下是一些处理跨域请求的方法: 设置 HTTP 头: 在服务器端&#…...
ReMe:为AI智能体构建长期记忆与上下文管理的开源框架
1. 项目概述与核心价值如果你正在构建或使用AI智能体(Agent),并且被“金鱼记忆”问题困扰——比如对话一长,模型就忘了开头说了什么;或者每次新会话都像初次见面,完全记不住用户偏好和历史任务——那么ReMe…...
基于苏格拉底式提问的LLM深度推理:从概念澄清到工程实践
1. 项目概述:当AI学会“苏格拉底式提问”最近在探索如何让大语言模型(LLM)的推理能力更上一层楼时,我遇到了一个非常有意思的开源项目:jumasheff/socratic-rules。这个名字本身就充满了哲学与技术碰撞的火花——“苏格…...
如何3分钟掌握Chat2DB:AI智能数据库管理完整指南
如何3分钟掌握Chat2DB:AI智能数据库管理完整指南 【免费下载链接】Chat2DB AI-driven database tool and SQL client, The hottest GUI client, supporting MySQL, Oracle, PostgreSQL, DB2, SQL Server, DB2, SQLite, H2, ClickHouse, and more. 项目地址: https…...
靠谱多模型聚合平台供应商盘点 为AI项目匹配靠谱合作伙伴
随着大模型技术的普及,企业AI项目对模型多样性、适配灵活性的需求日益提升。单一模型难以覆盖复杂业务场景的痛点逐渐凸显,多模型聚合平台凭借统一接口、成本管控、多模型协同等优势,成为AI项目落地的关键支撑。本文将盘点主流靠谱供应商&…...
基于AutoHotkey v2的Cursor AI编程效率工具:CapsLock快捷键方案详解
1. 项目概述:当CapsLock键成为你的AI编程副驾如果你是一名Windows用户,同时又是Cursor编辑器的深度使用者,那么你很可能和我一样,每天都在重复着一些机械操作:选中代码、复制、切换到AI聊天框、粘贴、再敲入一段提示词…...
PX4-Autopilot扩展卡尔曼滤波状态估计系统深度解析与实战调优
PX4-Autopilot扩展卡尔曼滤波状态估计系统深度解析与实战调优 【免费下载链接】PX4-Autopilot PX4 Autopilot Software 项目地址: https://gitcode.com/gh_mirrors/px/PX4-Autopilot PX4-Autopilot作为开源无人机飞控系统的标杆,其核心状态估计模块EKF2&…...
对比自行维护多个API密钥Taotoken的密钥管理带来了哪些便利
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 对比自行维护多个API密钥,Taotoken的密钥管理带来了哪些便利 在构建基于大模型的应用时,开发者常常需要接入…...
AwaDB:纯Python实现的轻量级本地向量数据库实践指南
1. 项目概述:当向量数据库遇上本地化与轻量化最近在折腾一些AI应用的原型,特别是RAG(检索增强生成)和智能问答系统,发现向量数据库的选择是个绕不开的话题。市面上有Pinecone、Weaviate这样的云服务,也有Mi…...
基于MCP协议与AI的智能收据处理服务器:从OCR到结构化提取实战
1. 项目概述:一个专为收据处理而生的MCP服务器如果你经常需要处理各种格式的收据、发票或账单,无论是个人记账、公司报销,还是财务审计,那么你肯定对“数据录入”这个繁琐环节深恶痛绝。一张张纸质或电子收据,上面的关…...
QGIS图层驾驭术 | 新手必会的三大核心操作
1. 图层基础:理解QGIS的"透明胶片"逻辑 第一次打开QGIS时,看到空白的画布和一堆按钮,很多人会感到无从下手。其实理解图层概念最简单的方式,就是想象你在用传统方法制作地图:把不同内容的透明胶片叠在一起。…...










