欢迎来到我的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/
如果我们测试使用代码模拟数据生成报错
java.lang.NoSuchMethodError:org.yaml.snakeyaml.LoaderOptions.setMaxAliasesForCollections(I)V
说明我们需要导入SnakeYAML最新的版本,可能是因为Maven版本过低(博主使用的是3.5.0的版本),因此我们要导入SnakeYAM最新的版本
org.yaml
snakeyaml
1.28
演示
直接点击测试即可
只对自动注入的 sql 起效:
- 插入: 不作限制
- 查找: 追加 where 条件过滤掉已删除数据,如果使用 wrapper.entity 生成的 where 条件也会自动追加该字段
- 更新: 追加 where 条件防止更新到已删除数据,如果使用 wrapper.entity 生成的 where 条件也会自动追加该字段
- 删除: 转变为 更新
字段类型支持说明:
字段类型支持说明:
- 支持所有数据类型(推荐使用
Integer
,Boolean
,LocalDateTime
)- 如果数据库字段使用
datetime
,逻辑未删除值和已删除值支持配置为字符串null
,另一个值支持配置为函数来获取值如now()
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)
具体的设置配置根据自己设置的数据库字段名以及自己的需求
在数据库中添加一个字段用于逻辑删除
如果yml文件中配置了指定的字段则不用使用注释
由此可知我们对指定ID的数据不会进行删除只会对其的逻辑删除的字段进行修改
当要更新一条记录的时候,希望这条记录没有被别人更新
乐观锁实现方式:
- 取出记录时,获取当前 version
- 更新时,带上这个 version
- 执行更新时, set version = newVersion where version = oldVersion
- 如果 version 不对,就更新失败
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;
}
}
在实体类中添加对应字段,数据库表中也添加指定的字段名
默认将乐观锁的字段携带过去了,当我们多次修改同一条数据,该字段会发生改变
运行代码后,书籍名称为后面b1变量设置的名称
与之前的对比的会进行两次修改
运行代码后,书籍名称为后面b变量设置的名称
与之前的对比的会进行1次修改
支持的数据库
mysql,oracle,db2,h2,hsql,sqlite,postgresql,sqlserver,Phoenix,Gauss ,clickhouse,Sybase,OceanBase,Firebird,cubrid,goldilocks,csiidb,informix,TDengine,redshift
达梦数据库,虚谷数据库,人大金仓数据库,南大通用(华库)数据库,南大通用数据库,神通数据库,瀚高数据库,优炫数据库,星瑞格数据库
本期的博客分享到此结束
各位老铁慢慢消化
下期博客博主会带来新货
三连加关注,阅读不迷路 !