MybatisPlus乐观锁悲观锁和分页查询逻辑删除
创始人
2024-04-07 18:14:23

目录

 乐观锁和悲观锁

测试乐观锁单线程成功的例子 

 乐观锁多线程失败案例

查询操作

分页查询

 删除操作

删除单个

 删除多个

 按map删除

逻辑删除


 乐观锁和悲观锁

乐观锁:顾名思义十分乐观,他总是认为不会出现问题,无论干什么都不去上锁,如果出现了问题,在次更新值测试

在数据库中新增字段version,在实体类中也要增加对应的,使用@Version表示他是一个乐观锁

乐观锁:先查询,获取它的版本号,然后在一系列的操作后,让他的版本号+1,前提是这个版本号还是之前查出来的那个版本号。

 @Version//乐观锁
private Integer version;

 写一个配置类

@Configuration
@MapperScan("com.mapper")
public class MyBatisPlusConfig {@Beanpublic MybatisPlusInterceptor mybatisPlusInterceptor() {MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();interceptor.addInnerInterceptor(new OptimisticLockerInnerInterceptor());return interceptor;}}

测试乐观锁单线程成功的例子 

 更新下

    @Testvoid update() {User user = userMapper.selectById(5L);user.setName("kongchaoAfter");user.setAge(21);user.setEmail("kc@qq.com");userMapper.updateById(user);}

 说明:

  • 支持的数据类型只有:int,Integer,long,Long,Date,Timestamp,LocalDateTime
  • 整数类型下 newVersion = oldVersion + 1
  • newVersion 会回写到 entity 中
  • 仅支持 updateById(id) 与 update(entity, wrapper) 方法
  • 在 update(entity, wrapper) 方法下, wrapper 不能复用!!!

 

 乐观锁多线程失败案例

@Testvoid update2() {//线程1User user = userMapper.selectById(5L);user.setName("kongchao1");user.setAge(11);user.setEmail("kc1@qq.com");//模拟另一个线程插队User user2 = userMapper.selectById(5L);user2.setName("kongchao2");user2.setAge(22);user2.setEmail("kc2@qq.com");userMapper.updateById(user2);//若没有乐观锁,则会覆盖user2的操作userMapper.updateById(user);}

数据库 

 运行结果

查询操作

 // 测试查询@Testpublic void testSelectById(){User user = userMapper.selectById(1L);System.out.println(user); 
}

   //  测试批量查询!@Testpublic void testSelectByBatchId(){List users = userMapper.selectBatchIds(Arrays.asList(1, 2, 3));users.forEach(System.out::println);}

@SpringBootTest
@MapperScan("com.mapper")//扫描mapper,自动创建实现类
class MybatisPlusQuickApplicationTests {@Autowiredprivate UserMapper userMapper;     
//按条件查询之一使用map操作@Testpublic void testSelectByBatchIds(){HashMap map = new HashMap<>();//  自定义要查询map.put("name","kc");map.put("age",18);List users = userMapper.selectByMap(map);users.forEach(System.out::println);}
}

分页查询

在配置类中加入分页插件

@Configuration
@MapperScan("com.mapper")
public class MyBatisPlusConfig {//  分页插件@Beanpublic PaginationInterceptor paginationInterceptor(){return  new PaginationInterceptor();}}

在测试类中测试

    //测试分页查询@Testpublic void pageTest(){//第一页,每页三个数据Page page=new Page<>(1, 3);userMapper.selectPage(page, null);page.getRecords().forEach(System.out::print);}

可以获取各种参数 

运行结果

 删除操作

删除单个

   @Testpublic void deleteById(){userMapper.deleteById(1583366844257988614L);}

 删除多个

    //删除多个@Testpublic void deleteByIds(){userMapper.deleteBatchIds(Arrays.asList(1583366844257988612L,1583366844257988613L));}

 按map删除

    //通过map删除
@Testpublic void deleteMap(){HashMap hashMap=new HashMap<>();hashMap.put("name", "kc");userMapper.deleteByMap(hashMap);
}

逻辑删除

 物理删除:从数据库中移除

逻辑删除:数据还存在数据库中,是增加了一个deleted字段,以这个字段作为条件,当字段=1时不显示这条数据

这个功能类似于回收站。并没有真正删除。

在数据库中添加字段deleted然后在实体类中也加入,并带上注解

   @TableLogic//逻辑删除private Integer deleted;

 在application.yaml配置文件中配置

mybatis-plus:global-config:db-config:
#      没有逻辑删除的显示为0,否则显示1logic-delete-value: 1logic-not-delete-value: 0

测试之前的删除

   //逻辑删除单个@Testpublic void deleteById(){userMapper.deleteById(6L);}

 运行结果,删除只是将deleted字段变为1

 测试查询

    // 测试查询@Testpublic void testSelectById(){User user = userMapper.selectById(6L);}

运行结果,发现也会加上deleted=0的条件

相关内容

热门资讯

埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...
应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...
脚上的穴位图 脚面经络图对应的... 人体穴位作用图解大全更清晰直观的标注了各个人体穴位的作用,包括头部穴位图、胸部穴位图、背部穴位图、胳...
猫咪吃了塑料袋怎么办 猫咪误食... 你知道吗?塑料袋放久了会长猫哦!要说猫咪对塑料袋的喜爱程度完完全全可以媲美纸箱家里只要一有塑料袋的响...
demo什么意思 demo版本... 618快到了,各位的小金库大概也在准备开闸放水了吧。没有小金库的,也该向老婆撒娇卖萌服个软了,一切只...
世界上最漂亮的人 世界上最漂亮... 此前在某网上,选出了全球265万颜值姣好的女性。从这些数量庞大的女性群体中,人们投票选出了心目中最美...
埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...
世界上最漂亮的人 世界上最漂亮... 此前在某网上,选出了全球265万颜值姣好的女性。从这些数量庞大的女性群体中,人们投票选出了心目中最美...
应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...
脚上的穴位图 脚面经络图对应的... 人体穴位作用图解大全更清晰直观的标注了各个人体穴位的作用,包括头部穴位图、胸部穴位图、背部穴位图、胳...
demo什么意思 demo版本... 618快到了,各位的小金库大概也在准备开闸放水了吧。没有小金库的,也该向老婆撒娇卖萌服个软了,一切只...
猫咪吃了塑料袋怎么办 猫咪误食... 你知道吗?塑料袋放久了会长猫哦!要说猫咪对塑料袋的喜爱程度完完全全可以媲美纸箱家里只要一有塑料袋的响...