MybatisPlus知识点总结(基于黑马2023MybatisPlus课程)

news2024/10/2 1:27:02

  MybatisPlus知识点总结

配套资料

黑马微服务框架笔记,内含mp
MybatisPlus.pptx
MyBatis-Plus (mp中文官网)

快速入门

入门案例

使用MybatisPlus的基本步骤:
1.引入MybatisPlus依赖,代替Mybatis依赖
image.png
2.定义Mapper接口并继承BaseMapper在这里插入图片描述注:继承时要指定泛型为你操作的实体类的类型

常见注解

MyBatisPlus通过扫描实体类,并基于反射获取实体类信息作为数据库表信息

约定
1.类名驼峰转下划线作为表名
2.名为id的字段作为主键
3.变量名驼峰转下划线作为表的字段名

当实际与约定不同时,需要使用注解

MybatisPlus中比较常用的几个注解如下:
@TableName:用来指定表名
@TableId:用来指定表中的主键字段信息
IdType枚举:
AUTO:数据库自增长
INPUT:通过set方法自行输入
ASSIGN_ID:分配 ID,接口IdentifierGenerator的方法nextId来生成id,默认实现类为DefaultIdentifierGenerator雪花算法使用

@TableField:用来指定表中的普通字段信息
@TableField的常见场景:
成员变量名与数据库字段名不一致
(变量名是name,数据库字段名是username)
成员变量名以is开头,且是布尔值
(例:isMarried可能会被看成married,需要注解@TableField(“is_married”)
成员变量名与数据库关键字冲突
(例:变量名order与数据库关键字order相同)
成员变量不是数据库字段
(例:adress在数据库不存在)

image.png
image.png

常见配置

MyBatisPlus的配置项继承了MyBatis原生配置和一些自己特有的配置。例如:
image.png

核心功能

条件构造器

mp支持各种复杂的where条件,可以满足日常开发的所有需求

案例
基于QueryWrapper的查询
需求:
1.查询出名字中带o的,存款大于等于1000元的人的id、username、info、balance字段
image.png
image.png

2.更新用户名为jack的用户的余额为2000
image.png
image.png

基于UpdateWrapper的更新
需求:更新id为1,2,4的用户的余额,扣200
image.png
image.png

条件构造器的用法:
1.QueryWrapper和LambdaQueryWrapper通常用来构建select、delete、update的where条件部分
2.UpdateWrapper和LambdaUpdateWrapper通常只有在set语句比较特殊才使用
3.尽量使用LambdaQueryWrapper和LambdaUpdateWrapper,避免硬编码

下图是LambdaQueryWrapper的使用,可以与上面第一个案例的代码进行对比
image.png

自定义SQL

我们可以利用MyBatisPlus的Wrapper来构建复杂的Where条件,然后自己定义SQL语句中剩下的部分。
image.png
上图的mp代码有部分是在Service层编写

当where条件外的部分没有办法用mp更方便地实现,只能在业务层(Service)拼接,而这样违背了企业开发的规范,就会用到自定义SQL

需求:将id在指定范围的用户(例如1、2、4 )的余额扣减指定值
步骤
1.基于Wrapper构建where条件
image.png
2.在mapper方法参数中用Param注解声明wrapper变量名称,必须是ew
image.png
3.自定义SQL,并使用Wrapper条件
image.png

Service接口

image.png
增:save相关
删:remove相关
改:update相关
查:get相关:查一个值
list相关:查多个值
count相关:查数量
page相关:查分页
复杂条件的查询、更新:用lambda相关

image.png

MP的Service接口使用流程是怎样的?
1.自定义Service接口继承IService接口
image.png
2.自定义Service实现类,实现自定义接口并继承ServiceImpl类
image.png

案例
基于Restful风格实现下列接口
需求:基于Restful风格实现下面的接口:
image.png
表单提交要有DTO实体,用户查询结果返回要有VO实体

IService的Lambda查询
需求:实现一个根据复杂条件查询用户的接口,查询条件如下:
name:用户名关键字,可以为空
status:用户状态,可以为空
minBalance:最小余额,可以为空
maxBalance:最大余额,可以为空
image.png

IService的Lambda更新
需求:改造根据id修改用户余额的接口,要求如下
1.完成对用户状态校验
2.完成对用户余额校验
3.如果扣减后余额为0,则将用户status修改为冻结状态

IService批量新增
需求:批量插入10万条用户数据,并作出对比:
普通for循环
插入IService的批量插入
开启rewriteBatchedStatements=true参数(在yaml的mysql->url中添加)

批处理方案:
普通for循环逐条插入速度极差,不推荐
MP的批量新增,基于预编译的批处理,性能不错
配置jdbc参数,开rewriteBatchedStatements,性能最好

扩展功能

代码生成

原因:内容类似
image.pngimage.png
image.png
image.png

代码生成步骤
image.png
image.png
image.png
image.png
image.png

DB静态工具

image.png

案例
需求:
1.改造根据id查询用户的接口,查询用户的同时,查询出用户对应的所有地址改造
2.根据id批量查询用户的接口,查询用户的同时,查询出用户对应的所有地址实现
3.根据用户id查询收货地址功能,需要验证用户状态,冻结用户抛出异常(练习)

分析:
前面两个接口中,在UserService中需要注入AdressService;而第三个接口在AdressService中需要注入UserService,形成循环依赖。
为了解决这个问题,可以使用静态工具

逻辑删除

逻辑删除就是基于代码逻辑模拟删除效果,但并不会真正删除数据。思路如下:
在表中添加一个字段标记数据是否被删除
当删除数据时把标记置为1
查询时只查询标记为0的数据

例如逻辑删除字段为deleted:
删除操作:
image.png
查询操作:
image.png

MybatisPlus提供了逻辑删除功能,无需改变方法调用的方式,而是在底层帮我们自动修改CRUD的语句。我们要做的就是在application.yaml文件中配置逻辑删除的字段名称和值即可:
image.png
image.png

枚举处理器

User类中有一个用户状态字段:image.png
在application.yml中配置全局枚举处理器:
image.png

如何实现PO类中的枚举类型变量与数据库字段的转换?
1.给枚举中的与数据库对应value值添加@EnumValue注解
2.在配置文件中配置统一的枚举处理器,实现类型转换
拓展:
枚举在给前端返回的时候,默认返回的是枚举项的名字
可以利用@JsonValue来自己定义返回的对象

默认情况下如图
image.png
image.png

在desc上加了@JsonValue,status返回结果发生改变。(value同理)
image.png
image.png

JSON处理器

//无JSON处理器
user.setInfo("{\"age\": 24, \"intro\": \"英文老师\", \"gender\": \"female\"}");

//有JSON处理器
user.setInfo(UserInfo.of(24,"英文老师","female"));

插件功能

MyBatisPlus提供的内置拦截器有下面这些:

序号拦截器描述
1TenantLineInnerInterceptor多租户插件
2DynamicTableNameInnerInterceptor动态表名插件
3PaginationInnerInterceptor分页插件
4OptimisticLockerInnerInterceptor乐观锁插件
5IllegalSQLInnerInterceptorSQL性能规范插件,检测并拦截垃圾SQL
6BlockAttackInnerInterceptor防止全表更新和删除的插件

分页插件

首先,要在配置类中注册MyBatisPlus的核心插件,同时添加分页插件:
image.png

接着,就可以使用分页的API了:
image.png
image.png
image.png

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

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

相关文章

浅谈2024 年 AI 辅助研发趋势!

目录 ​编辑 引言 一、AI辅助研发现状 1. 技术发展 2. 工具集成 3. 应用场景 二、AI辅助研发趋势 1. 更高的自动化程度 2. 更高的智能化程度 3. 更多的领域应用 4. 更高的重视度 三、结论 四. 完结散花 悟已往之不谏,知来者犹可追 创作不易&#xff…

编码器-解码器模型(Encoder-Decoder)

注意:本文引用自专业人工智能社区Venus AI 更多AI知识请参考原站 ([www.aideeplearning.cn]) 编码器-解码器模型简介 Encoder-Decoder算法是一种深度学习模型结构,广泛应用于自然语言处理(NLP)、图像处理…

红包题第一弹

下载附件,发现有86个压缩包 现每个压缩包里面都有图片,010打开图片末尾都有base64部分,并且每个压缩包里面图片末尾的base64长度一样,刚好每一张的base64长度为100。猜测需要拼接起来然后解码 写个python脚本 import os import …

Midjourney绘图欣赏系列(九)

Midjourney介绍 Midjourney 是生成式人工智能的一个很好的例子,它根据文本提示创建图像。它与 Dall-E 和 Stable Diffusion 一起成为最流行的 AI 艺术创作工具之一。与竞争对手不同,Midjourney 是自筹资金且闭源的,因此确切了解其幕后内容尚不…

SpringBoot多数据源切换 多数据源事务解决方案 二

SpringBoot多数据源事务解决方案 https://blog.csdn.net/u013407099/article/details/124526396多数据源切换下保证事务解决方案 https://blog.csdn.net/reee112/article/details/90442542概述 前情提要 多数据源切换流程结构图如下所示,包含几个组成元素&#xff…

浪潮信息InManage升级发布 三大功能释放数据中心运维管理压力

近日,浪潮信息官网开放了数据中心管理平台InManage全新版本的开放体验渠道,升级后的InManage拥有更强大的功能体验,可以有效解决大模型等AIGC应用对于数据中心的运维管理压力,通过全新功能的加持,浪潮信息将让数据中心…

Flutter 开发环境搭建-VS Code篇

1.准备环境 Java SDK 下载及安装Flutter SDK 安装及配置环境变量 下载地址将flutter sdk解压目录下的bin目录放到系统环境变量中 检查环境,在系统终端中输入: # 打印flutter sdk版本号 flutter --version# 检查flutter运行环境 flutter doctor第一次运…

(C语言)strlen函数模拟实现(三种方法)

目录 1. strlrn函数 2. 注意事项&#xff1a; 3. 计数器法 4. 指针减指针方法&#xff1a; 5. 递归方法&#xff1a; 1. strlrn函数 头文件<string.h> 实现函数模拟须知&#xff1a; • 字符串以 \0 作为结束标志 &#xff0c;strlen函数返回的是在字符串中 \0 …

chrome高内存占用问题

chrome号称内存杀手不是盖的&#xff0c;不设设置的话&#xff0c;经常被它内存耗尽死机是常事。以下自用方法 1 自带的memory saver chrome://settings/performance PerformanceMemory Saver When on, Chromium frees up memory from inactive tabs. This gives active tab…

Matlab|10节点潮流计算程序(通用性强)

主要内容 潮流计算程序matlab 牛拉法 采用matlab对10节点进行潮流计算&#xff0c;采用牛拉法&#xff0c;程序运行可靠&#xff0c;牛拉法实现通用性强&#xff0c;可替换参数形成其他节点系统的潮流计算程序。 下载链接

011-keep-alive详解

keep-alive详解 1、简介2、keep-alive的使用效果未使用keep-alive的效果图使用keep-alive的效果图include和exclude指定是否缓存某些组件使用keep-alive的钩子函数执行顺序问题 3、keep-alive的应用场景举例4、总结 1、简介 keep-alive 是 Vue 的内置组件&#xff0c;当它包裹…

深入浅出计算机网络 day.2 概论⑤ 计算机网络的性能指标

请等一等&#xff0c; 用一个完整的春天 捣碎麦田 —— 24.3.10 一、计算机网络的性能指标 上 计算机网络的性能指标被用来从不同方面度量计算机网络的性能 常用的八个计算机网络性能指标 速率 比特&#xff08;bit&#xff09;是计算机中数据量的基本单位&#xff0c;一个比特…

SpringCloud-Alibaba-Nacos教程

SpringCloud-Alibaba-Nacos教程 下载地址 https://github.com/alibaba/nacos/releases/tag/2.2.3 直接进入bin包 运行cmd命令 startup.cmd -m standalone 运行成功后 进入nacos可视化页面 账号密码默认都是nacos http://localhost:8848/nacos 微服务入驻Nacos服务注册…

设计模式—桥接模式

定义: 桥接模式是将抽象部分与它的实现部分分离&#xff0c;使它们都可以独立地变化。它是一种对象结构型模式&#xff0c;又称为柄体(Handle and Body)模式或接口(Interfce)模式。 本章代码:小麻雀icknn/设计模式练习 - Gitee.com 结构: 抽象化(Abstraction)角色&#xff1a…

关于Sora你可能不知道的五项功能

1. 引言 Sora是OpenAI开创性的人工智能视频生成器&#xff0c;它能够通过简单的文字提示词来生成高质量的视频&#xff0c;最近在人工智能领域掀起了巨大的浪潮。 但Sora的功能远不止根据文字提示词来生成视频。下面是五个其他功能示例&#xff1a; 改变视频中的环境风格生成…

selenium鼠标操作实战

鼠标操作实战 鼠标单击操作 click()内置鼠标操作包ActionChains鼠标双击操作double_click()鼠标右击操作context_click()鼠标指针悬浮操作move_to_element(ele)鼠标拖动操作drag_and_drop(source, target)其他鼠标操作汇总 鼠标单击操作 click() from selenium import webdriv…

Springboot整合Mybaits启动过程

Springboot整合Mybaits启动过程 1.前言2.MybatisAutoConfiguration3.SqlSessionFactoryBean3.1 XMLConfigBuilder.parse()3.1.1 XMLMapperBuilder.parse()3.1.1.1 XMLStatementBuilder.parse() 4.SqlSession4.1 Executor 1.前言 直接加载mybatis配置文件&#xff0c;然后创建S…

ssm爱心捐赠物资维护系统-计算机毕业设计源码09536

摘要 随着信息技术的快速发展&#xff0c;计算机应用已经进入成千上万的家庭。随着物资数量的增加&#xff0c;物资库存管理也存在许多问题。物资数据的处理量正在迅速增加&#xff0c;原来的手工管理模式不适合这种形式。使用计算机可以完成数据收集、处理和分析&#xff0c;减…

React useMemo钩子指南:优化计算性能

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 &#x1f35a; 蓝桥云课签约作者、上架课程《Vue.js 和 E…

部署到 Adreno™ GPU

介绍​ Adreno™ 是由高通开发并用于许多 SoC 的图形处理单元&#xff08;GPU&#xff09;半导体 IP 核系列。 Adreno™ GPU 可以加速复杂几何图形的渲染&#xff0c;在提供高性能图形和丰富的用户体验的同时拥有很低的功耗。 TVM 使用 TVM 的原生 OpenCL 后端 和 OpenCLML …