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

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.mzph.cn/diannao/37690.shtml

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

相关文章

Day 48 消息队列集群RabbitMQ

消息队列集群-RabbitMQ 一、消息中间件 中间件 tomcat java web中间件 web容器 mysql php php mysql uwsgi python mysql mycat 数据库中间件 rabbitMQ 消息中间件 1、简介 MQ 全称为(Message Queue消息队列)。是一种应用程序对应用程序的通信方…

【全球首个开源AI数字人】DUIX数字人-打造你的AI伴侣!

目录 1. 引言1.1 数字人技术的发展背景1.2 DUIX数字人项目的开源意义1.3 DUIX数字人技术的独特价值1.4 本文目的与结构 2. DUIX数字人概述2.1 定义与核心概念2.2 硅基智能与DUIX的关系2.3 技术架构2.4 开源优势2.5 应用场景2.6 安全与合规性 3. DUIX数字人技术特点3.1 开源性与…

【Java Gui精美界面】IDEA安装及配置SwingX

SwingX 是一个基于 Swing 的 Java GUI 库,旨在为 Swing 提供额外的功能和丰富的组件 特点描述基于 Swing继承了 Swing 的所有特性和功能。丰富组件SwingX 提供了一组高级 UI 组件,例如 TreeTable仍在发展中不活跃的发展ing。。。支持搜索高亮如 TreeTab…

【分布式系列】分布式锁的设计与实现

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

steam社区加载异常、加载失败、无法加载、黑屏的解决方法

随着steam夏季特卖的临近,最近几天开启史低折扣的大作已经越来越少了,不过也并不是没有。最经典的知名大作文明6之前已经打到1折的骨折价了,没想到也能背刺,现在是新史低价0.5折11元,很多玩家入手后纷纷前往社区看新手…

ZABBIX-7.0LTS在线部署部署教程

ZABBIX-7.0LTS在线部署部署教程 环境: 操作系统: ubuntu 22.04zabbix-server版本: 7.0LTS系统配置[需结合监控的业务量提供配置]: 建议2C(CPU)8G(运行) 100GB(存储)架构:LNMP 第一步: 系统初始化 1.配置…

计算机网络知识整理笔记

目录 1.对网络协议的分层? 2.TCP/IP和UDP之间的区别? 3.建立TCP连接的三次握手? 4.断开TCP连接的四次挥手? 5.TCP协议如何保证可靠性传输? 6.什么是TCP的拥塞控制? 7.什么是HTTP协议? 8…

MySQL InnoDB支持几种行格式

数据库表的行格式决定了一行数据是如何进行物理存储的,进而影响查询和DML操作的性能。 在InnoDB中,常见的行格式有4种: 1、COMPACT:是MySQL 5.0之前的默认格式,除了保存字段值外,还会利用空值列表保存null…

动手学深度学习(Pytorch版)代码实践 -卷积神经网络-20填充与步幅

20填充与步幅 import torch from torch import nn# 此函数初始化卷积层权重,并对输入和输出提高和缩减相应的维数 def comp_conv2d(conv2d, X):# 这里的(1,1)表示批量大小和通道数都是1#将输入张量 X 的形状调整为 (1, 1, height,…

Grafana-11.0.0 在线部署教程

Grafana-11.0.0 在线部署教程 环境: 操作系统: ubuntugrafana版本: 11.0.0 (建议不要按照最新版)grafana要求的系统配置不高,建议直接部署在监控服务器上,比如zabbix服务器、prometheus服务器…

从菌群代谢到健康影响——认识肠道丙酸和丁酸

谷禾健康 短链脂肪酸这一词经常出现在谷禾的文章和报告中,那你真的了解短链脂肪酸吗?短链脂肪酸(SCFA)主要是肠道微生物群在结肠内通过发酵碳水化合物(包括膳食和内源性碳水化合物,主要是抗性淀粉和膳食纤维)和一些微生物可利用的蛋白质而产生…

光线追踪:原理与实现

版权声明 本文为“优梦创客”原创文章,您可以自由转载,但必须加入完整的版权声明文章内容不得删减、修改、演绎本文视频版本:见文末 各位同学大家好,今天我要给大家分享的是光线追踪的原理和实现大家知道在过往很多年里面&#x…

超简单的nodejs使用log4js保存日志到本地(可直接复制使用)

引入依赖 npm install log4js 新建配置文件logUtil.js const log4js require(log4js);// 日志配置 log4js.configure({appenders: {// 控制台输出consoleAppender: { type: console },// 文件输出fileAppender: {type: dateFile,filename: ./logs/default, //日志文件的存…

如何从0构建一款类似pytest的工具

Pytest主要模块 Pytest 是一个强大且灵活的测试框架,它通过一系列步骤来发现和运行测试。其核心工作原理包括以下几个方面:测试发现:Pytest 会遍历指定目录下的所有文件,找到以 test_ 开头或 _test.py 结尾的文件,并且…

MS-Net: A Multi-Path Sparse Model for Motion Prediction in Multi-Scenes

MS-Net: A Multi-Path Sparse Model for Motion Prediction in Multi-Scenes 基本信息 期刊:IEEE ROBOTICS AND AUTOMATION LETTERS (IF 4.6 SCI3区)单位:同济大学,上海人工智能实验室时间:2023年12月数据…

架构师必知的绝活-JVM调优

前言 为什么要学JVM? 首先:面试需要 了解JVM能帮助回答面试中的复杂问题。面试中涉及到的JVM相关问题层出不穷,难道每次面试都靠背几百上千条面试八股? 其次:基础知识决定上层建筑 自己写的代码都不知道是怎么回事&a…

C++中的虚函数表结构框架

一.虚函数表介绍 Virtual Table虚函数表是实现多态的 每个有虚函数的类的实现,都有个指向虚函数的指针表(不管是父类还是子类) 指向虚表的指针是作为数据成员存在实例对象中 当调用虚函数时,就去查找对象的虚表中指向整顿派生类函…

Bayes分类器设计

本篇文章是博主在人工智能等领域学习时,用于个人学习、研究或者欣赏使用,并基于博主对人工智能等领域的一些理解而记录的学习摘录和笔记,若有不当和侵权之处,指出后将会立即改正,还望谅解。文章分类在AI学习笔记&#…

每日一题——Python实现PAT乙级1059 C语言竞赛(举一反三+思想解读+逐步优化)四千字好文

一个认为一切根源都是“自己不够强”的INTJ 个人主页:用哲学编程-CSDN博客专栏:每日一题——举一反三Python编程学习Python内置函数 Python-3.12.0文档解读 目录 我的写法 时间复杂度分析 空间复杂度分析 代码优化建议 总结 我要更强 优化方法…

.NET周刊【6月第4期 2024-06-23】

国内文章 C#.Net筑基-集合知识全解 https://www.cnblogs.com/anding/p/18229596 .Net中提供了数组、列表、字典等多种集合类型,分为泛型和非泛型集合。泛型集合具有更好的性能和类型安全性。集合的基础接口包括IEnumerator、IEnumerable、ICollection、IList、ID…