Mybatis-Plus扩展(进一步探索Mybatis-Plus的功能)

发布时间:2023年12月18日

?🎉🎉欢迎来到我的CSDN主页!🎉🎉

🏅我是君易--鑨,一个在CSDN分享笔记的博主。📚📚

🌟推荐给大家我的博客专栏《SpringBoot开发之Mybatis-Plus系列》。🎯🎯

🎁如果感觉还不错的话请给我关注加三连吧!🎁🎁


前言

? ? ? ? 在上一期的博客中我们对Mybatis-Plus有了一个初步的认识以及掌握如何在SpringBoot中如何集成,以及对其增删改查功能的方法功能的实现。今天的博客是基于上一期的知识点进行进一步的延伸学习。

一、数据模拟生成器

BootApplicationTests.java

package com.yx.mybatisplus;

import com.github.javafaker.Faker;
import com.yx.mybatisplus.pojo.Book;
import com.yx.mybatisplus.service.IBookService;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

import java.util.Locale;

@SpringBootTest
class BootApplicationTests {

    @Autowired
    private IBookService bookService;

    @Test
    public void test() {
        for (int i = 0; i < 10; i++) {
//            Goods goods = new Goods();
            Book book=new Book();
            Faker faker = new Faker(Locale.CHINA);
            book.setBookname(faker.book().title());
            book.setPrice(Float.parseFloat(String.valueOf(faker.number().randomDouble(2, 100, 999))));
            bookService.save(book);
        }
    }

}

? ? ? ? 我们是通过for循环和Faker进行一个数据生成,Farker的具体使用可查看下方网址:

https://baeldung.xiaocaicai.com/java-faker/

演示

二、逻辑删除

1. 概述

只对自动注入的 sql 起效:

  • 插入: 不作限制
  • 查找: 追加 where 条件过滤掉已删除数据,如果使用 wrapper.entity 生成的 where 条件也会自动追加该字段
  • 更新: 追加 where 条件防止更新到已删除数据,如果使用 wrapper.entity 生成的 where 条件也会自动追加该字段
  • 删除: 转变为 更新
  • 字段类型支持说明:

字段类型支持说明:

  • 支持所有数据类型(推荐使用?Integer,Boolean,LocalDateTime)
  • 如果数据库字段使用datetime,逻辑未删除值和已删除值支持配置为字符串null,另一个值支持配置为函数来获取值如now()

2. 使用

2.1 yml文件配置

mybatis-plus:
  global-config:
    db-config:
      logic-delete-field: flag # 全局逻辑删除的实体字段名(since 3.3.0,配置后可以忽略不配置步骤2)
      logic-delete-value: 1 # 逻辑已删除值(默认为 1)
      logic-not-delete-value: 0 # 逻辑未删除值(默认为 0)

? ? ? ? ?具体的设置配置根据自己设置的数据库字段名以及自己的需求

2.2 数据库字段配置?

? ? ? ? ?在数据库中添加一个字段用于逻辑删除

2.3 实体对象字段定义设置

如果yml文件中配置了指定的字段则不用使用注释?

2.4 控制层编写删除请求

3. 测试?

? ? ? ? ?由此可知我们对指定ID的数据不会进行删除只会对其的逻辑删除的字段进行修改

三、乐观锁插件

1. 概述

当要更新一条记录的时候,希望这条记录没有被别人更新
乐观锁实现方式:

  • 取出记录时,获取当前 version
  • 更新时,带上这个 version
  • 执行更新时, set version = newVersion where version = oldVersion
  • 如果 version 不对,就更新失败

2. 使用:

2.1??插件类导入

MybatisPlusConfig.java

package com.yx.yxbook.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.mybatis.spring.annotation.MapperScan;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class MybatisPlusConfig {

    /**
     * 添加分页插件
     */
    @Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor() {
        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
        interceptor.addInnerInterceptor(new OptimisticLockerInnerInterceptor());//乐观锁
//        interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
        return interceptor;
    }

}

2.2 实体类添加乐观锁字段

? ? ? ? 在实体类中添加对应字段,数据库表中也添加指定的字段名

?

?

2.3 控制类编写修改方法

3. 测试

?

????????默认将乐观锁的字段携带过去了,当我们多次修改同一条数据,该字段会发生改变

情景模拟:

情景一:

? ? ? ? ?运行代码后,书籍名称为后面b1变量设置的名称

? ? ? ? 与之前的对比的会进行两次修改

情景二:

?? ? ? ? ?运行代码后,书籍名称为后面b变量设置的名称

? ? ? ? ?? ? ? ? 与之前的对比的会进行1次修改

四、分页插件

1. 概述

支持的数据库

  • mysql,oracle,db2,h2,hsql,sqlite,postgresql,sqlserver,Phoenix,Gauss ,clickhouse,Sybase,OceanBase,Firebird,cubrid,goldilocks,csiidb,informix,TDengine,redshift

  • 达梦数据库,虚谷数据库,人大金仓数据库,南大通用(华库)数据库,南大通用数据库,神通数据库,瀚高数据库,优炫数据库,星瑞格数据库

2.?使用

2.1 插件类在引入分页插件

2.2 控制类使用

2.3 分页的模糊查询?

3. 测试

初步测试

?带模糊查询的测试


🎉🎉本期的博客分享到此结束🎉🎉

📚📚各位老铁慢慢消化📚📚

🎯🎯下期博客博主会带来新货🎯🎯

🎁三连加关注,阅读不迷路?!🎁

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