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

2023-12-17 18:28:13

🥳🥳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();
    }

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

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

文章来源:https://blog.csdn.net/m0_74315688/article/details/135034433
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。