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

  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.hqwc.cn/news/525883.html

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

相关文章

代码随想录算法训练营第36天—动态规划04 | ● 背包问题 ● 01背包 ● 滚动数组 ● 416. 分割等和子集

背包问题 常见的背包问题类型(大厂面试重点掌握01背包和完全背包即可)题目描述:有n件物品和一个最多能背重量为w 的背包。第i件物品的重量是weight[i],得到的价值是value[i] 。每件物品能用*次,求解怎么装物品使得装入…

Echarts 报提示 There is a chart instance already initialized on the dom.

问题原因: 每次执行 Echarts图例方法都会拿到相关的dom元素执行Echarts图例初始化操作 但是每次执行的时候拿到的dom元素又是相同的,Echarts初始化执行的时候检查到这个dom上面已经有了一个 图表了 就不会再重新拿到这个dom元素执行初始化操作 解决方案&…

Vue.js数据绑定解密:深入探究v-model和v-bind的原理与应用

hello宝子们...我们是艾斯视觉擅长ui设计和前端开发10年经验!希望我的分享能帮助到您!如需帮助可以评论关注私信我们一起探讨!致敬感谢感恩! Vue.js数据绑定解密:深入探究v-model和v-bind的原理与应用 一、引言 Vue.…

如何打sap NOTE

文章目录 1 Introduction2 Method2.1 search note2.2 download note2.3 upload note 3 Summarry 1 Introduction SAP Notes is a set of instructions to remove known errors from the SAP systems. Using the Note Assistant tool, SAP Notes can be applied to the system.…

云服务器Linux环境部署mall电商项目完整实践教程

云服务器Linux环境部署mall电商项目完整实践教程 引言JDK8 安装Docker 环境安装MySQL安装rpm 包安装 Mysql5.7 Redis 安装RabbitMQ 安装ElasticSearch 与 Kibana 安装MongoDB安装Nacos 安装安装 Nginx 服务部署后端SpringCloud微服务jar包站点效果结语阿里云服务器推荐 引言 在…

文献阅读:DEA-Net:基于细节增强卷积和内容引导注意的单图像去雾

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 摘要Abstract文献阅读:DEA-Net:基于细节增强卷积和内容引导注意的单图像去雾1、研究背景2、方法提出3、相关知识3.1、DEConv3.3、多重卷积的…

python 基础知识点(蓝桥杯python科目个人复习计划61)

今日复习内容:想到什么复习什么 因为比赛用到的编辑器是IDLE,所以从现在开始,我就不用pycharm了。 例题1: 从1到2020的所有数字中,有多少个2? 这个题是一个填空题,我用的方法是先在编辑器上…

python自动化测试如何做数据缓存 ?这个第三方包推荐给你,方便又简单!

1.数据缓存说明 数据缓存可以说也是项目开发中比不可少的一个工具 ,像我们测试的系统中 ,你都会见到像Redis一样的数据缓存库 。使用缓存数据库的好处不言而喻,那就是效率高 ,简单数据直接放在缓存中 ,存取简单方便 。…

好物周刊#47:快捷启动器

https://github.com/cunyu1943 村雨遥的好物周刊,记录每周看到的有价值的信息,主要针对计算机领域,每周五发布。 一、项目 1. Tianji All-in-One 的数据洞察中心,同时具备网站分析器 状态监控器 服务状态上报的功能。 2. Ip2…

论文笔记:Efficient Training of Language Models to Fill in the Middle

导语 Decoder-only的模型只能从左向右看,无法利用双向信息完成填空等操作,本文是OpenAI最早提出使用Fill-in-the-model到Autoregressive形式的模型中的文章,启发了后面一些Text-to-Code的大模型,比如InCoder,SantaCod…

Linux下下载安装JDK配置Java环境变量

Linux下下载安装JDK配置Java环境变量 1. 下载JDK 下载链接:(https://www.oracle.com/java/technologies/javase/jdk17-archive-downloads.html) 2. 上传至服务器并解压 可通过shell工具进行上传,我这里是上传安装在/opt目录 解压jdk-17.0.10_linux-x64_b…

Nacos注册中心的部署及使用(超详细)

目录 1 前言 2 注册中心的原理 3 Linux上Nacos的部署 3.1 Mysql的部署 3.2 存储Nacos数据的数据库的建立 3.3 准备Nacos的环境文件 3.4 部署Nacos 3.5 检查是否成功 3.5.1 查看日志 3.5.2 访问Nacos 4 Java中的配置及食用方法 4.1 引入依赖坐标 4.2 配置Nacos 4…