Mybatis-plus——增删改查相关+id生成策略+多数据操作(删除)+逻辑删除+乐观锁+代码生成器

项目文件总览 

Dao层中

 domain层中

 测试类中含有三个测试方法,分别对应,插入删除和修改

 

id生成策略

 

针对不同的场景使用不同的id,用到提供的一个注解@TableId

 

 在实体类中使用@Tablefiled注解时可以看见有如下的多种策略

 

使用第一个AUTO策略

 

 运行插入方法得到

在数据库表格中成功实现递增 

 

在@TableId注解中还有多种策略

NONE是没有策略,input是用户输入

下面三个带注解的是过时的,UUID由上面的ASSIGN_UUID替代

三个key值为3的涉及到雪花算法生成ID,ID_WORKER生成整数,ID_WORKER_STR生成字符串

合并为了ASSIGN_ID

 使用INPUT策略

 要先把数据库表格上的自增关闭

 先后修改实体类属性Id上策略

 然后如果使用上面的方法,不指定ID直接insert的话就会报错

提示id不能为空

    @Testvoid testSave() {mpdb mpdb=new mpdb();mpdb.setName("鼠鼠一号");mpdb.setAge(22);mpdb.setTel("123456");mpdb.setPassword("pw1");mpdb.setId(666L);userDao.insert(mpdb);}

 使用上面的设置ID的测试方法后就又可以了

使用雪花算法策略 

修改策略

    @TableId(type = IdType.ASSIGN_ID)private Long id;

 然后还是上面的代码setID(666L)注释掉

    @Testvoid testSave() {mpdb mpdb=new mpdb();mpdb.setName("鼠鼠一号");mpdb.setAge(22);mpdb.setTel("123456");mpdb.setPassword("pw1");//mpdb.setId(666L);userDao.insert(mpdb);}

运行得

可以看见ID为一长串的数字 

雪花算法生成的是一个64位的数字串,所以使用L来存,64位分为如下

ID生成策略扩展(全局设置):

对应实体类上的id也可以不用加上那个@TableId注解

在配置文件的mybatis-plus配置项中如下

然后就可以删除实体类上的@TableFiled注解了

全局配置还可以配置表名映射等。

 多数据操作(删除与查询)

使用deleteBAtchIds()方法,传进去一个集合参数,装了要删除的id

    @Testvoid testDelete() {List<Long> list=new ArrayList<Long>();list.add(4L);list.add(5L);list.add(666L);userDao.deleteBatchIds(list);}

运行后可以看见相应数据已经没了

这里也可按照多个ID进行查询,使用的方法是selectBatchIds(),效果一样

 逻辑删除

应用场景如下,一个员工表和一个业绩表,当删除一个员工时会连带业绩一起删除 

 当统计数据时会出现脏数据,因此在表后增加一个删除字段用于逻辑删除。

首先修改数据库增加一个deleted字段并设置默认值0

 在实体类中增加逻辑删除字段,并增加一个@TableLogic注解表明是一个逻辑删除字段

并为注解设置两个参数,vlaue是没有删除,delval是删除了,要和数据库对应

@TableLogic(value="0",delval = "1")

 使用如下的语句进行删除操作

        userDao.deleteById(1L);

 查看数据库可以看见数据没有删除,而是改了deleted为1

这里的注解内部应该就是一个update语句了

 控制台日志也可以看见就是一个update操作        

 然后经过逻辑删除后,再次查询全集时就看不见id为1的数据了,会自动跳过

 如果想要看见全部数据就要在DAO层自己写SQL语句。

逻辑删除的注解也可以在配置文件里面进行定义

 

在配置文件定义之后,就不需要在实体类上加注解了,只要提供相应字段即可

乐观锁(应对并发)

锁用于解决并发引起的问题

场景有:

 由于业务是并发的,不加锁的话可能会出现-1,-2

这个方案可以解决一些请求量较小的场景,比如2000个请求以下

第一步

在数据库表结构加上一个version字段表明当前谁在操作该数据,int类型

 并在实体类也加上一个Integer类型数据并加上一个@Version注解

使用update set abc=1,version=version+1 where version=? 这个格式保证每个人拿到的version都是不同的.

这里要像执行分页查询时一样,开启一个拦截器实现在update语句后面加默认语句 

 

@Testvoid testUpdate(){mpdb mpdb=new mpdb();mpdb.setId(1L);mpdb.setName("鼠鼠2号");mpdb.setVersion(1);userDao.updateById(mpdb);}

 运行得sql语句里面有了两个version

 因此可以发现,要修改之前要先获取即可修改的数据的version

        //1.先通过id将数据查询出来mpdb mpdb=userDao.selectById(3L);//2.将要修改的属性逐一设置进去mpdb.setName("北岭");userDao.updateById(mpdb);

 这里加锁的实现方法就是两个用户拿到了同一个version,但是其中一个执行完后修改了version版本导致另一个人的update失效了

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/13117.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vue清除地址栏参数(可以单个,可以多个)

需求 vue跳转新页面后&#xff0c;清除url里面的参数&#xff0c;就是上一个页面带过来的参数&#xff0c;只用一次 mounted () {this.$nextTick(() > {let url this.getnewurl()window.history.replaceState(null, null, url);})},methods: { //根据参数名去清除&#xf…

ModaHub魔搭社区:阿里云CTO周靖人:魔搭社区将成为中国最大的“大模型自由市场”

7月7日消息&#xff0c;阿里云CTO周靖人在上海世界人工智能大会上宣布了阿里云的发展计划。 他表示&#xff0c;阿里云将致力于推动中国大模型生态的繁荣&#xff0c;并为大模型创业公司提供全方位的支持。阿里云魔搭社区已经聚集了180万AI开发者和900多个优质AI模型&#xff0…

Unity3d的智力拼图小游戏

Unity3d的智力拼图小游戏 项目地址&#xff1a;https://download.csdn.net/download/Highning0007/88015674

3.4.流的学习,异步任务的管理

目录 前言1. 流总结 前言 杜老师推出的 tensorRT从零起步高性能部署 课程&#xff0c;之前有看过一遍&#xff0c;但是没有做笔记&#xff0c;很多东西也忘了。这次重新撸一遍&#xff0c;顺便记记笔记。 本次课程学习精简 CUDA 教程-流的学习&#xff0c;异步任务的管理 课程大…

机器学习之多元微积分

机器学习的多元微积分跟高等数学中的多元微积分有很多不同之处。 机器学习中的变量都是向量或者矩阵机器学习中的函数一般都是线性函数&#xff0c;而不是高数中的曲线和曲面、体积等函数。因此&#xff0c;机器学习中的微积分跟线性代数结合在一起。机器学习中导数的分子分母…

山西电力市场日前价格预测【2023-07-09】

日前价格预测 预测明日&#xff08;2023-07-09&#xff09;山西电力市场全天平均日前电价为386.09元/MWh。其中&#xff0c;最高日前价格为505.65元/MWh&#xff0c;预计出现在21: 30。最低日前电价为286.38元/MWh&#xff0c;预计出现在13: 30。 以上预测仅供学习参考&#x…

新版本FasterTransformer的FUSED_MHA

关于 UNFUSED_PADDED_MHA VS FUSED_MHA FUSED_MHA用了另一种kernel的执行方法(和添加链接描述相同,将在下一个section说明)UNFUSED_PADDED 的 KERNELS执行代码在 src/fastertransformer/kernels/unfused_attention_kernels.cu enum class AttentionType {UNFUSED_MHA,UNFUSED…

OpenCloudOS社区开源,助力软件开发

早前红帽宣布限制源代码访问性的政策&#xff0c;并解释说RHEL相关源码仅通过CentOS Stream公开&#xff0c;付费客户和合作伙伴可通过Red Hat Customer Portal访问到源代码&#xff0c;由此也导致非客户获取源码越来越麻烦&#xff0c; 据了解&#xff0c;CentOS是红帽发行的…

CentOS 7镜像下载 以及 DVD ISO 和 Minimal ISO 等各版本的区别介绍

1.官网下载 官网下载地址&#xff1a;官网下载链接 点击进入下载页面&#xff0c;随便选择一个下载即可&#xff08;不推荐&#xff0c;推荐阿里云下载&#xff0c;见下文&#xff09; 阿里云下载站点&#xff08;速度非常快推荐&#xff09; 阿里云下载链接&#xff1a; http…

第十二章 kafka

Producer:Producer即生产者,消息的产生者,是消息的入口。 kafka cluster: Broker:Broker是kafka实例,每个服务器上有一个或多个kafka的实例,我们姑且认为每个broker对应一台服务器。每个kafka集群内的broker都有一个不重复的编号,如图中的broker-0、broker-1等…… 主…

Spring 最全入门教程详解

目录 一、Spring Framwork简介1. Spring Framework五大功能模块2. Spring Framework特性 二、IOC容器1. IOC思想2. IOC容器在Spring中的实现3.基于xml管理Bean3.1 引入依赖3.2 创建类3.3 创建Spring的配置文件3.4 创建测试类3.5 总结 4.DI依赖注入4.1 setter注入4.2 构造器注入…

Mycat【Mycat高可用(安装配置HAProxy、安装配置Keepalived)】(八)-全面详解(学习总结---从入门到深化)

目录 Mycat高可用_安装配置HAProxy Mycat高可用_安装配置Keepalived 复习&#xff1a; Mycat高可用_安装配置HAProxy 安装配置HAProxy 查看列表 yum list | grep haproxy yum安装 yum -y install haproxy 修改配置文件 $ vim /etc/haproxy/haproxy.cfg 启动HAProxy …