Mybatis-Plus学习|快速入门CRUD、主键生成策略(雪花算法、主键自增等)、自动填充、乐观锁、分页插件、逻辑删除

news2024/11/24 20:38:32

MyBatisPlus概述

为什么要学习它呢?MyBatisPlus可以节省我们大量工作时间,所有的CRUD代码它都可以自动化完成!

JPA、tk-mapper、MyBatisPlus
偷懒的!

MyBatis-Plus(简称 MP)是一个 MyBatis 的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。

特性

快速入门

地址:https://mp.baomidou.com/guide/quick-start.html#初始化工程
使用第三方组件:

步骤

创建一个数据库、数据表

并且插入一些测试数据

编写项目,初始化项目!使用SpringBoot初始化!

1、导入对应的依赖

导入相关依赖

说明:我们使用 mybatis-plus 可以节省我们大量的代码,尽量不要同时导入 mybatis 和 mybatis-plus!版本的差异!

2、配置

5、连接数据库!这一步和 mybatis 相同!

idea连接数据库

输入数据库账号密码测试连通

选择连接的数据库

3、编写代码

先根据数据库表中的字段编写实体类

编写Mapper层,注解也可用@mapper,至此,所有crud操作已经自动编写完成

在启动类上加入扫描mapper文件夹的注解

编写测试代码,调用相应的查询操作

思考

1、SQL谁帮我们写的?MyBatis-Plus 都写好了
2、方法哪里来的? MyBatis-Plus 都写好了

配置日志

我们所有的sql现在是不可见,,我们希望知道它是怎么执行的,所以我们必须要看日志!

配置完毕日志之后,后面的学习就需要注意这个自动生成的SQL,你们就会喜欢上 MyBatis-Plus!

CRUD扩展

测试插入

主键生成策略

分布式系统唯-id生成:https://www.cnblogs.com/haoxinyue/p/5208136.html

雪花算法

snowflake是Twitter开源的分布式ID生成算法,结果是一个Long型的ID。其核心思想是:使用41bit作为毫秒数,10bit作为机器的ID(5个bit是数据中心,5个bit的机器ID),12bit作为毫秒内的流水号(意味着每个节点在每毫秒可以产生4096个ID),最后还有一个符号位,永远是0。可以保证几乎全球唯一!

MP提供的主键生成策略有如下几种

默认不配的情况下是雪花算法即如下所示,如果要修改主键生成策略,需要用到如下的@TableId注解修改生成方式


主键自增

实体类字段上 @TableId(type = IdType.AUTO)

数据库字段一定要是自增!

测试更新

MP的强大之处在于,我们通过给这个user对象设置不同的更改值,它会自动完成一个动态的sql语句拼接

自动填充

创建时间、修改时间!这些个操作一遍都是自动化完成的,我们不希望手动更新!
阿里巴巴开发手册:所有的数据库表:gmt_create、gmt_modified几乎所有的表都要配置上!而且需要自动化!

第一种方式:数据库级别(工作中不允许你修改数据库)

在数据库中设置这两个字段,默认值为当前时间,更新时间在更新的时候自动更新

再次测试插入方法,我们需要先把实体类同步!实体类加入这两个属性

第二种方式:代码级别

1、删除数据库的默认值、更新操作!

2、实体类字段属性上需要增加注解

创建时间在插入的时候自动填充,更新时间在插入和更新操作的时候自动填充

3.创建一个Handler实现MetaObjectHandler接口,重写两个方法,配置好在插入、更新操作时要自动填充的字段内容

乐观锁

在面试过程中,我们经常会被问道乐观锁,悲观锁!这个其实非常简单!
乐观锁:故名思意十分乐观,它总是认为不会出现问题,无论干什么不去上锁!如果出现了问题,再次更新值测试

悲观锁:故名思意十分悲观,它总是认为总是出现问题,无论干什么都会上锁!再去操作!我们这里主要讲解 乐观锁机制!

乐观锁实现方式:
。取出记录时,获取当前 version
。更新时,带上这个version
执行更新时,set version=newVersion where version=oldVersion
。如果version不对,就更新失败

给数据库中增加version字段!

2、我们实体类加对应的字段

新建一个MP的配置类,将我们之前在主启动类上扫描mapper的注解也剪切过来,在这个类中注册乐观锁插件

测试乐观锁

可以看到,最后一条更新语句没有执行,因为version版本已经在第一次更新时发生了改变

测试查询

可以根据id去查单个数据,也可通过一个id的列表来查询多个数据

也可以自定义查询,传入map查询

分页查询

分页在网站使用的十分之多!
1、原始的 limit 进行分页
2、pageHelper 第三方插件
3、MP 其实也内置了分页插件!

1、配置拦截器组件即可

在MP配置文件中注册分页插件

2、直接使用Page对象即可!

测试删除

可以通过id删除单个数据,也可通过id的列表批量删除数据

也可通过map自定义删除数据

逻辑删除

物理删除:从数据库中直接移除
逻辑删除:再数据库中没有被移除,而是通过一个变量来让他失效! deleted=0=> deleted=1

管理员可以查看被删除的记录!防止数据的丢失,类似于回收站!
测试一下:
1、在数据表中增加一个 deleted 字段,默认值为0

2、实体类中增加这个属性

3、配置

在MP配置类中注册逻辑删除组件

在properties文件中进行配置,删除默认值为1,不删除默认值为0

测试逻辑删除

可以看到在我们根据id删除数据时,不是删除sql,而是执行了更新sql,默认在其后追加了删除条件,逻辑删除字段为0的数据,设置了这个字段值更改为1,代表这个数据删除成功

我们在以后得查数据中,都会看到默认增加了条件,逻辑删除字段为0,才可查出

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

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

相关文章

springboot网上商城系统-计算机毕业设计源码08789

摘 要 随着互联网趋势的到来,各行各业都在考虑利用互联网将自己推广出去,最好方式就是建立自己的互联网系统,并对其进行维护和管理。在现实运用中,应用软件的工作规则和开发步骤,采用Java技术建设网上商城系统。 本设…

WMS可以为制造企业解决什么问题?

在快速变化、高度竞争的制造业环境中,仓库不仅是储存物料的地方,更是企业运营的“心脏”。然而,随着业务的扩展和产品种类的增多,仓库管理变得越来越复杂,传统的管理方式已经难以满足现代企业的需求。这时,…

Verilog HDL语法入门系列(二):Verilog的语言文字规则

目录 1 空白符和注释2 整数常量和实数常量3 整数常量和实数常量4 字符串(string)5 格式符与转义符6 标识符(identifiers) 微信公众号获取更多FPGA相关源码: 1 空白符和注释 2 整数常量和实数常量 Verilog中,常量(literals)可是整数也可以是…

python根据excel的文件创建文件夹

这几天要整理一点文档,需要批量生成一些文件夹,(其实也可以进一步自动生成各种文档),用到了py的功能,在此记录一下。 1.准备工作 需要两个库支持openpyxl和os 安装 pip install openpyxl2.代码思路 打算…

通用创新点:坐标注意力机制!低成本下表现依旧SOTA

同学们,今天我们来聊聊坐标注意力。 坐标注意力是一种非常高效的注意力机制,它通过将位置信息嵌入到通道注意力中,轻轻松松就能提高轻量级网络的性能。 这一机制的核心在于其创新的结构和对位置信息的精确捕捉能力,允许模型在强…

缓存双写一致性(笔记)

缓存更新方案 旁路缓存模式 这是比较多的 旁路缓存模式:缓存有就返回,没有数据库查询,放入缓存返回。 还有些常用缓存策略 读穿透模式 读穿透和旁路很相似,程序不需要关注从哪里读取数据,它只需要从缓存查询数据。…

机器学习-保存模型并根据模型进行预测 python demo

文章目录 前言机器学习-保存模型,根据模型进行预测python demo1. 将我们创建的线性回归模型保存到本地2. 利用我们保存的模型进行房价预测 demo2. 利用我们保存的模型生成对应的预测线性图 demo 前言 如果您觉得有用的话,记得给博主点个赞,评…

LLM大语言模型-AI大模型全面介绍

简介: 大语言模型(LLM)是深度学习的产物,包含数十亿至数万亿参数,通过大规模数据训练,能处理多种自然语言任务。LLM基于Transformer架构,利用多头注意力机制处理长距离依赖,经过预训…

一个土木工程专业背景的开发者,讲述开源带给他的力量

在前段时间我们举办的“TDengine Open Day”第一季技术沙龙中,TDengine 应用研发高级工程师谭雪峰进行的“开源之路:程序员的成长与探索”主题分享获得了众多参会者的好评。谭雪峰从自身独特的职业发展经历出发,分享了自己在开源领域的种种收…

DM达梦数据库字符串函数整理

💝💝💝首先,欢迎各位来到我的博客,很高兴能够在这里和您见面!希望您在这里不仅可以有所收获,同时也能感受到一份轻松欢乐的氛围,祝你生活愉快! 💝&#x1f49…

视觉理解与图片问答,学习如何使用 GPT-4o (GPT-4 Omni) 来理解图像

🍉 CSDN 叶庭云:https://yetingyun.blog.csdn.net/ 一、引言 OpenAI 最新发布的 GPT-4 Omni 模型,也被称为 GPT-4o,是一个多模态 AI 模型,旨在提供更加自然和全面的人机交互体验。 GPT-4o 与 GPT-4 Turbo 都具备视觉功…

3d中模型显示黑色给不了材质---模大狮模型网

如果3D模型显示黑色,而且无法给它添加材质,可能有以下几种原因: 一:模型没有UV贴图 UV贴图是3D模型表面纹理的一种方式,如果模型没有正确的UV贴图,渲染时可能会显示黑色。在大多数3D建模软件中&#xff0c…

Telnet远程登录(Cisco)

Telnet 基于TCP/IP协议族 远程终端协议 在Internet上远程登录 VTY(Virtual Teletype) 通过IP连接物理上的终端 实现在Internet上 登陆和配置远程目标终端 A Router>enable Router#config Router(config)#hostname A A(config)#interface gigabitEthernet 0/0 A(confi…

归并排序与快速排序总结-c++

一,归并排序 归并排序(Merge sort)是建立在归并操作上的一种有效的排序算法。该算法分治法(Divide and Conquer)的一个非常典型的应用。 作为一种典型的分而治之思想的算法应用,归并排序的实现由两种方法…

机器学习/pytorch笔记:time2vec

1 概念部分 对于给定的标量时间概念 t,Time2Vec 的表示 t2v(t)是一个大小为 k1的向量,定义如下: 其中,t2v(t)[i]是 t2v(t)的第 i 个元素,F是一个周期性激活函数,ω和 ϕ是可学习的参数。 以下是个人理解&am…

最热门的智能猫砂盆好不好用?这期统统告诉你!

身为上班族的我们,常常被工作和出差填满日程。忘记给猫咪铲屎也不是一次两次了。但我们必须意识到,不及时清理猫砂盆不仅会让猫咪感到不适,还可能引发泌尿系统感染、皮肤疾病等健康问题。为了解决这个问题,越来越多的铲屎官开始将…

JavaWeb——MySQL:navicate客户端工具简单使用

目录 1. 连接 2. 新建数据库 3. 使用数据库 4. 新建表 5.使用表 6. 导出数据库 我这里是英文版,没有进行汉化。 1. 连接 点击左上角Connection,选择MySQL,(我连接的是自己计算机上的数据库)连接名输入&#x…

Java面试题:聚簇索引和非聚簇索引

聚簇索引和非聚簇索引 聚簇索引(聚集索引) 将数据的存储和索引放在一块,索引结构的叶子节点保存了行数据 索引字段必须存在,且只能存在一个 非聚集索引(二级索引) 将数据和索引分开存储,索引结构的叶子节点关联的是对应的主键 索引字段可以存在多个 索引的选取规则 如果…

Unity2D - 碰撞检测及边界检测

1. 地面检测 1.1 地面检测的逻辑及代码 一般情况下,对于手人物进行事件处理或动作处理时,我们需要判定人物是否在地面上,这个时候最好的方式是设定地面碰撞器,只有角色在地面时才可以进行跳跃; 我们可以想象物体的重心向地面延伸…

Java的gui开发-Swing如何一键打包exe、dmg等

java的gui开发其实很方便,性能也不错,知名的idea开发工具也是java-swing开发,只是用的人少,看了我的例子3分钟就能学会,分分钟写桌面端,下面教你如何一键打包windows端exe Java-Swing-Template java的gui开…