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

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

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

目录

[🥳🥳Welcome Huihui's Code World ! !🥳🥳](#🥳🥳Welcome Huihui's Code World ! !🥳🥳)

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

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

1.乐观锁

①基本介绍

②使用案例

[数据库表添加 version 字段](#数据库表添加 version 字段)

[实体类增加 version 属性,并添加 @Version 注解](#实体类增加 version 属性,并添加 @Version 注解)

配置乐观锁插件

测试

2.逻辑删除

①基本介绍

②使用案例

配置yml文件

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

测试

3.分页

①基本介绍

②使用案例

配置分页插件

实现分页


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

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

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

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

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

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

1.乐观锁

①基本介绍

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

②使用案例

数据库表添加 version 字段

默认是1

实体类增加 version 属性,并添加 @Version 注解
配置乐观锁插件
java 复制代码
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;
    }
}

测试

java 复制代码
  //测试乐观锁(成功)
    @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的那条数据了)

java 复制代码
//测试乐观锁(失败)
    @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文件
html 复制代码
mybatis-plus:
  global-config:
    db-config:
      logic-delete-field: deleted # 全局逻辑删除的实体字段名
      logic-delete-value: 1       # 逻辑已删除值(默认为 1)
      logic-not-delete-value: 0   # 逻辑未删除值(默认为 0)
实体类中添加逻辑删除字段
测试
java 复制代码
//逻辑删除
    @Test
    public void demo3(){
        //先使用deleteById删除对应的数据
        oaUserMapper.deleteById(1L);
    }

3.分页

①基本介绍

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

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

②使用案例

配置分页插件
java 复制代码
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;
    }



}
实现分页
java 复制代码
 @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();
    }

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

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

相关推荐
百事老饼干10 分钟前
Java[面试题]-真实面试
java·开发语言·面试
customer0818 分钟前
【开源免费】基于SpringBoot+Vue.JS医院管理系统(JAVA毕业设计)
java·vue.js·spring boot·后端·spring cloud·开源·intellij-idea
2402_8575893628 分钟前
SpringBoot框架:作业管理技术新解
java·spring boot·后端
HBryce2432 分钟前
缓存-基础概念
java·缓存
一只爱打拳的程序猿1 小时前
【Spring】更加简单的将对象存入Spring中并使用
java·后端·spring
杨荧1 小时前
【JAVA毕业设计】基于Vue和SpringBoot的服装商城系统学科竞赛管理系统
java·开发语言·vue.js·spring boot·spring cloud·java-ee·kafka
minDuck1 小时前
ruoyi-vue集成tianai-captcha验证码
java·前端·vue.js
白子寰1 小时前
【C++打怪之路Lv14】- “多态“篇
开发语言·c++
王俊山IT1 小时前
C++学习笔记----10、模块、头文件及各种主题(一)---- 模块(5)
开发语言·c++·笔记·学习