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

news2024/9/20 10:45:04

项目文件总览 

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不能为空

    @Test
    void 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)注释掉

    @Test
    void 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

    @Test
    void 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语句后面加默认语句 

 


    @Test
    void 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.coloradmin.cn/o/733829.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Nuxt3 loyouts公共页面布局

1.目录结构 2.在app.vue入口处添加代码 注意&#xff1a;Header首字母我是大写的&#xff0c;然而页面并没有显示头部&#xff0c;只显示尾部 改为首字母小写才会有效

SWAT模型18项典型案例实践、EFDC模型建模方法

SWAT模型“十八般武艺”高阶研修 以18项典型的案例为主线&#xff0c;不仅能够从技术层系统掌握&#xff0c;还能更好的拓展与相关学科的融合创新应用&#xff0c;解决实际的问题&#xff0c;内容讲解具有技术深度与系统、普遍需求、热点创新、实际问题解决等特点&#xff0c;…

计算机组成原理课程论文: Intel 80386/80486 的体系架构调研

摘要 本文以Intel 80386/80486体系架构为研究对象&#xff0c;详细介绍了该体系架构的基本概念、特点和优势&#xff0c;分析了其在不同领域的应用情况&#xff0c;并对其未来的发展做出一定的展望和评价。 首先&#xff0c;我们介绍了研究背景和目的&#xff0c;阐述了Intel 8…

40. 同时在线最多的人数

文章目录 题目需求思路一实现一题目来源 题目需求 根据用户登录明细表&#xff08;user_login_detail&#xff09;&#xff0c;求出平台同时在线最多的人数。 期望结果如下&#xff08;截取部分&#xff09;&#xff1a; cn7 需要用到的表&#xff1a; 用户登录明细表&…

接口性能优化技巧

背景 我负责的系统在去年初就完成了功能上的建设&#xff0c;然后开始进入到推广阶段。随着推广的逐步深入&#xff0c;收到了很多好评的同时也收到了很多对性能的吐槽。 刚刚收到吐槽的时候&#xff0c;我们的心情是这样的&#xff1a; 当越来越多对性能的吐槽反馈到我们这里的…

阿里云服务器架构X86_GPU_裸金属_超级计算集群详解

阿里云服务器架构有什么区别&#xff1f;X86计算、ARM计算、GPU/FPGA/ASIC、弹性裸金属服务器、超级计算集群有什么区别&#xff1f;阿里云服务器网分享云服务器ECS架构详细说明&#xff1a; 目录 阿里云服务器ECS架构说明 X86计算 ARM计算 GPU/FPGA/ASIC 弹性裸金属服务…

基于simulink使用SAD方法进行运动检测(附源码)

一、前言 此示例演示如何使用绝对差分总和 &#xff08;SAD&#xff09; 方法来检测视频序列中的运动。此示例将 SAD 独立应用于视频序列的四个象限。如果在象限中检测到运动&#xff0c;则示例会以红色突出显示该象限。 二、模型 下图显示了移动侦测示例模型&#xff1a; 三…

一文搞懂Java线程池执行原理核心参数

文章目录 前言一、为什么要使用线程池创建线程&#xff1f;二、线程池的核心参数&#xff08;重点&#xff09;1.核心线程数2.最大线程数3.救急线程的存活时间4.救急线程的时间单位5.任务队列6.线程工厂7.任务拒绝策略 三、线程池的执行原理四、一个小案例总结 前言 最近面试过…

CEC2018动态多目标优化算法:基于自适应启动策略的混合交叉动态约束多目标优化算法(MC-DCMOEA)求解CEC2018

一、动态多目标优化问题 1.1问题定义 1.2 动态支配关系定义 二、 基于自适应启动策略的混合交叉动态多目标优化算法 基于自适应启动策略的混合交叉动态多目标优化算法&#xff08;Mixture Crossover Dynamic Constrained Multi-objective Evolutionary Algorithm Based on Se…

Blender基础入门(1):Blender建模系统简单介绍

文章目录 我个人的Blender专栏前言偏好设置推荐常用组合按键空格&#xff08;需在偏好设置里面选择空格->工具&#xff09;ShiftA&#xff08;添加物体&#xff09;右键&#xff1a;物体对象操作I:显示关键帧操作~&#xff08;1左边的波浪号&#xff09;&#xff1a;视角选择…

【算法与数据结构】1047、LeetCode删除字符串中的所有相邻重复项

文章目录 一、题目二、解法三、完整代码 所有的LeetCode题解索引&#xff0c;可以看这篇文章——【算法和数据结构】LeetCode题解。 一、题目 二、解法 思路分析&#xff1a;这道题和【算法与数据结构】20、LeetCode有效的括号类似&#xff0c;本质上都是找一个字符的匹配字符。…

深入理解Linux网络——内核是如何接收到网络包的

文章目录 一、相关实际问题二、数据是如何从网卡到协议栈的1、Linux网络收包总览2、Linux启动1&#xff09;创建ksotfirqd内核线程2&#xff09;网络子系统初始化3&#xff09;协议栈注册4&#xff09;网卡驱动初始化5&#xff09;网卡启动 3、迎接数据的到来1&#xff09;硬中…

Python潮流周刊#10:Twitter 的强敌 Threads 是用 Python 开发的!

△点击上方“Python猫”关注 &#xff0c;回复“1”领取电子书 你好&#xff0c;我是猫哥。这里每周分享优质的 Python 及通用技术内容&#xff0c;大部分为英文&#xff0c;已在小标题注明。&#xff08;标题取自其中一则分享&#xff0c;不代表全部内容都是该主题&#xff0c…

Vue+elementUI实现下拉框多选和反选

Vue代码如下&#xff1a; <el-form-item label"下拉框名称&#xff1a;"><el-select size"mini" v-model"testModelName" focus"getSelectInfo" :disabled"SelectStyle" filterable clearable placeholder"&…

SpringBoot实战(二十)集成Druid连接池

目录 一、简介1.定义2.特点3.竞品对比 二、搭建测试项目1.Maven依赖2.yaml配置2.1 JDBC配置2.2 连接池配置2.3 监控配置 三、测试1.查看监控页面2.单元测试 四、补充&#xff1a;1.如何打印慢SQL&#xff1f;2.去除广告3.如何手动获取监控内容 一、简介 1.定义 Druid数据库连…

简析电力系统网络靶场建设的价值、挑战与趋势

在当下已经演变为持久战的俄乌地区冲突中&#xff0c;通信、交通、能源供应等相关国家关键基础设施一直是双方互相攻击的重点目标。同时&#xff0c;“网络战”作为先行战场&#xff0c;也把关基设施作为主阵地&#xff0c;不断以相对轻量级成本制造比想象中更广泛的破坏和社会…

Haproxy搭建Web群集和脑裂的概念

目录 脑裂概念 脑裂如何生的: 解决方法 Haproxy概念 HAProxy的主要特性有&#xff1a; HAProxy负载均衡策略非常多&#xff0c;常见的有如下8种&#xff1a; CDN Nginx LVS haproxy haproxy服务器部署 关闭防火墙 编译安装 Haproxy Haproxy服务器配置 添加haprox…

Spring MVC教程

Spring MVC属于SpringFrameWork的后续产品&#xff0c;已经融合在Spring Web Flow里面。 Spring 框架提供了构建 Web 应用程序的全功能 MVC 模块。 使用 Spring 可插入的 MVC 架构&#xff0c;从而在使用Spring进行WEB开发时&#xff0c;可以选择使用Spring的Spring MVC框架或集…

明明都是2000坐标的地形图,怎么位置就不一样呢?

前几天有一个同事在工作中遇到一个问题,核心说起来就是,甲方发来两个年份的同一个片区的地形图,并且言之凿凿都是2000坐标的,但是在一个CAD复制后,到另一个CAD中使用“粘贴到原坐标”,就是位置对不上。 以下使用测试数据还原一下情景。 地形图A,是一个高程点: 地形图…

【网络系统集成】Windows Server集群实验

1.实验名称 Windows Server集群实验 2.实验目的 通过使用Windows 2003进行实验,理解与掌握服务器技术与系统集成相关知识点。 3.实验内容 (1)在Vmware Workstation中安装Windows Server 2003 (2)在Windows Server 2008中完成DNS,WEB的配置