当前位置: 首页 > news >正文

Mybatis-Plus最新教程

目录

原理:MybatisPlus通过扫描实体类,并基于反射获取实体类信息作为数据库信息。

​编辑1.添加依赖

2.常用注解

3.常见配置:

4.条件构造器

5.QueryWrapper

6.UpdateWrapper

7.LambdaQueryWrapper:避免硬编码

8.自定义SQL

9.Iservice接口

10.案例:实现接口​编辑

11.Lambda

12.批量新增

13.代码生成

14.静态工具

15.逻辑删除

16.通用枚举

17. JSON类型处理器

18. 生成秘钥

19.分页插件:


原理:MybatisPlus通过扫描实体类,并基于反射获取实体类信息作为数据库信息。

规定:

1.添加依赖

  1. service 继承IService<实体类>
  2. 实现类中要继承IService的实现类ServiceImpl<mapper,实体类>

  1. 自定义 mapper 要继承BaseMapper<实体类>

新增:insert(实体)  查询:selectByid(5L) 批量查:selectBatchIds(List.of(1L,2L,3L))

    修改updateById(实体)  删除deleteById(5L)

2.常用注解

@TableName(”表名”):指定表名

@TableId(value=””,type=”主键类型”):用来指定表中的主键字段信息

@TableField(“”):用来指定表中的普通字段信息

转义:@TableField(“ ‘order’ ”);

成员变量不是数据库字段:@TableField(exist = false)

3.常见配置:

4.条件构造器

5.QueryWrapper

无论是修改、删除、查询,都可以使用QueryWrapper来构建查询条件

Eg:查询:查询出名字中带o的,存款大于等于1000元的人

// 2.查询数据

    List<User> users = userMapper.selectList(wrapper);

    users.forEach(System.out::println);

更新:更新用户名为jack的用户的余额为2000

userMapper.update(user, wrapper)//(实体类,wrapper)

6.UpdateWrapper

SET的赋值结果是基于字段现有值的

更新id为1,2,4的用户的余额,扣200

UPDATE user SET balance = balance - 200 WHERE id in (1, 2, 4)

前面实体为更新的内容,后面为更新的条件

.setSql("balance = balance - 200")

userMapper.update(null, wrapper);

7.LambdaQueryWrapper:避免硬编码

8.自定义SQL

利用MyBatisPlus的wrapper来构建复杂的where条件,然后自己定义SQL语句剩下的部分。利用Wrapper生成查询条件,再结合Mapper.xml编写SQL

拼接 ${ew.customSqlSegment}

9.Iservice接口

自定义Service继承Iservice<实体>,自定义实现类继承ServiceImpl<自定义Mapper,实体>再实现自定义接口

  • save:新增
  • remove:删除
  • update:更新
  • get:查询单个结果
  • list:查询集合结果
  • count:计数
  • page:分页查询

多个ID查:userService.listByIds(List.of(1L,2L,3L).var

Users.forEach(System.out::println)

LambdaQuery()

LambdaUpdate()

10.案例:实现接口

11.Lambda

实现一个根据复杂条件查询用户的接口,查询条件如下:

  • name:用户名关键字,可以为空
  • status:用户状态,可以为空
  • minBalance:最小余额,可以为空
  • maxBalance:最大余额,可以为空
  • .one():最多1个结果
  • .list():返回集合结果
  • .count():返回计数结果

2.扣减后余额为0,则将用户status修改为冻结状态=2

// 4.扣减余额 update tb_user set balance = balance - ?

    int remainBalance = user.getBalance() - money;

    lambdaUpdate()

            .set(User::getBalance, remainBalance) // 更新余额

            .set(remainBalance == 0, User::getStatus, 2) // 动态判断,是否更新status

            .eq(User::getId, id)

            .eq(User::getBalance, user.getBalance()) // 乐观锁

            .update();

12.批量新增

13.代码生成

14.静态工具

有的时候Service之间也会相互调用,为了避免出现循环依赖问题,MybatisPlus提供一个静态工具类:Db

1.需求:改造根据id用户查询的接口,查询用户的同时返回用户收货地址列表

15.逻辑删除

对于一些比较重要的数据,我们往往会采用逻辑删除的方案,即:

  • 在表中添加一个字段标记数据是否被删除
  • 当删除数据时把标记置为1
  • 查询时只查询标记为0的数据

一旦采用了逻辑删除,所有的查询和删除逻辑都要跟着变化,非常麻烦。

为了解决这个问题,MybatisPlus就添加了对逻辑删除的支持。

注意,只有MybatisPlus生成的SQL语句才支持自动的逻辑删除,自定义SQL需要自己手动处理逻辑删除。

例如:逻辑删除字段:deleted

删除操作:Update user SET deleted = 1 WHERE id = 1 AND deleted = 0

查询操作:SELECT * FROM  User WHERE deleted = 0

方法与普通删除一模一样,但是底层的SQL逻辑变了:

16.通用枚举

像这种字段我们一般会定义一个枚举,做业务判断的时候就可以直接基于枚举做比较。但是我们数据库采用的是int类型,对应的PO也是Integer。因此业务操作时必须手动把枚举与Integer转换,非常麻烦。

枚举类型与数据库类型自动转换

1. 在application.yaml文件中添加配置:

mybatis-plus:  configuration:default-enum-type-handler:        com.baomidou.mybatisplus.core.handlers.MybatisEnumTypeHandler

17. JSON类型处理器

数据库的user表中有一个info字段,是JSON类型:

格式像这样:

{"age": 20, "intro": "佛系青年", "gender": "male"}

而目前User实体类中却是String类型:

将User类的info字段修改为UserInfo类型,并声明类型处理器:

测试可以发现,所有数据都正确封装到UserInfo当中了:

同时,为了让页面返回的结果也以对象格式返回,我们要修改UserVO中的info字段:

此时,在页面查询结果如下:

18. 生成秘钥

19.分页插件:

相关文章:

Mybatis-Plus最新教程

目录 原理&#xff1a;MybatisPlus通过扫描实体类&#xff0c;并基于反射获取实体类信息作为数据库信息。 ​编辑1.添加依赖 2.常用注解 3.常见配置&#xff1a; 4.条件构造器 5.QueryWrapper 6.UpdateWrapper 7.LambdaQueryWrapper:避免硬编码 8.自定义SQL 9.Iservic…...

【Shell脚本11】Shell 函数

Shell 函数 linux shell 可以用户定义函数&#xff0c;然后在shell脚本中可以随便调用。 shell中函数的定义格式如下&#xff1a; [ function ] funname [()]{action;[return int;]}说明&#xff1a; 1、可以带function fun() 定义&#xff0c;也可以直接fun() 定义,不带任何…...

STM32中独立看门狗和窗口看门狗的使用方法

独立看门狗&#xff08;Independent Watchdog&#xff0c;IWDG&#xff09;和窗口看门狗&#xff08;Window Watchdog&#xff0c;WWDG&#xff09;是STM32微控制器中提供的两种看门狗定时器。看门狗定时器是一种硬件计时器&#xff0c;用于监视系统的运行状态&#xff0c;并在…...

刷题笔记(第七天)

1.找出对象 obj 不在原型链上的属性(注意这题测试例子的冒号后面也有一个空格~) 返回数组&#xff0c;格式为 key: value结果数组不要求顺序 输入&#xff1a; var C function() {this.foo ‘bar’; this.baz ‘bim’;}; C.prototype.bop ‘bip’; iterate(new C()); 输出…...

python3.7 + pygame1.9.3实现小游戏《外星人入侵》(五):计分

本小节首先在游戏画面中添加一个Play按钮&#xff0c;用于根据需要启动游戏&#xff0c;为此在game_stats.py中输入以下代码&#xff1a; class GameStats():def __init__(self,ai_settings):# 初始化统计信息self.ai_settings ai_settingsself.reset_stats()#让游戏一开始处…...

[量化投资-学习笔记014]Python+TDengine从零开始搭建量化分析平台-Python知识点汇总

以下内容总结了之前章节涉及到的 Python 知识点&#xff0c;看过之前的章节同学&#xff0c;就不用打开了。 1. Restful 访问 TDengine 数据库 知识点&#xff1a; 发送给 TDengine 的 HTTP Body 里面是 SQL 明文&#xff0c;请求方式为 POST。TDenging 返回的结果是 JSON 格…...

[论文分享] Never Mind the Malware, Here’s the Stegomalware

Never Mind the Malware, Here’s the Stegomalware [IEEE Security & Privacy 2022] Luca Caviglione | National Research Council of Italy Wojciech Mazurczyk | Warsaw University of Technology and FernUniversitt in Hagen 近年来&#xff0c;隐写技术已逐渐被观…...

代号:408 —— 1000道精心打磨的计算机考研题

文章目录 &#x1f4cb;前言&#x1f3af;计算机科学与技术专业介绍&#xff08;14年发布&#xff09;&#x1f9e9;培养目标&#x1f9e9;毕业生应具备的知识和能力&#x1f9e9;主要课程 &#x1f3af;代号&#xff1a;408&#x1f525;文末送书&#x1f9e9;有什么优势&…...

《QT从基础到进阶·十六》QT实现客户端和服务端的简单交互

QT版本&#xff1a;5.15.2 VS版本&#xff1a;2019 客户端程序主要包含三块&#xff1a;连接服务器&#xff0c;发送消息&#xff0c;关闭客户端 服务端程序主要包含三块&#xff1a;打开消息监听&#xff0c;接收消息并反馈&#xff0c;关闭服务端 1、先打开服务端监听功能 …...

行业追踪,2023-11-13

自动复盘 2023-11-13 凡所有相&#xff0c;皆是虚妄。若见诸相非相&#xff0c;即见如来。 k 线图是最好的老师&#xff0c;每天持续发布板块的rps排名&#xff0c;追踪板块&#xff0c;板块来开仓&#xff0c;板块去清仓&#xff0c;丢弃自以为是的想法&#xff0c;板块去留让…...

开放领域对话系统架构

开放领域对话系统是指针对非特定领域或行业的对话系统&#xff0c;它可以与用户进行自由的对话&#xff0c;不受特定领域或行业的知识和规则的限制。开放领域对话系统需要具备更广泛的语言理解和生成能力&#xff0c;以便与用户进行自然、流畅的对话。 与垂直领域对话系统相比…...

终端神器:tmux

安装tmux简单使用自己的理解&#xff08;小白专属&#xff09; 使用的初衷&#xff1a; 在Linux终端下&#xff0c;由于session&#xff08;会话&#xff09;和windows&#xff08;窗口&#xff09;是绑定一起的&#xff0c;你打开一个终端的黑窗口就是打开一个会话&#xff0c…...

Elasticsearch学习(一)

ElasticSearch学习&#xff08;一&#xff09; 1 什么是Elasticsearch 1.什么是搜索&#xff1f; 百度&#xff1a;我们比如说想找寻任何信息时候就会上百度上搜索一下 比如说&#xff1a;电影、图片、小说等等…&#xff08;提到搜索的第一印象&#xff09; 百度 &#x…...

CSS3的常见边框汇总

<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>CSS3 边框</title><style>body, ul, li, dl, dt, dd, h1, h2, h3, h4, h5 {margin: 0;padding: 0;}body {background-color: #F7F7F7;}.wr…...

酷柚易汛ERP-购货订单操作指南

1、应用场景 先下购货订单&#xff0c;收货入库后生成购货单。 2、主要操作 2.1 新增购货订单 打开【购货】-【购货订单】新增购货订单。&#xff08;*为必填项&#xff0c;其他为选填&#xff09; ① 录入供应商&#xff1a;点击供应商字段框的 &#xff0c;在弹框中选择供…...

【数据仓库】数仓分层方法详解与层次调用规范

文章目录 一. 数仓分层的意义1. 清晰数据结构。2. 减少重复开发3. 方便数据血缘追踪4. 把复杂问题简单化5. 屏蔽原始数据的异常6. 数据仓库的可维护性 二. 如何进行数仓分层&#xff1f;1. ODS层2. DW层2.1. DW层分类2.2. DWD层2.3. DWS 3. ADS层 4、层次调用规范 一. 数仓分层…...

记一次线上问题引发的对 Mysql 锁机制分析

背景 最近双十一开门红期间组内出现了一次因 Mysql 死锁导致的线上问题&#xff0c;当时从监控可以看到数据库活跃连接数飙升&#xff0c;导致应用层数据库连接池被打满&#xff0c;后续所有请求都因获取不到连接而失败 整体业务代码精简逻辑如下&#xff1a; Transaction p…...

Android 工厂模式距离传感器逻辑优化

Android 工厂模式距离传感器逻辑优化 接到客户反馈提到距离传感器校准完毕之后&#xff0c;每次测试完成界面都会弹出“请点击校准按钮进行校准&#xff01;”Toast弹窗&#xff0c;需要对弹窗的显示逻辑进行优化&#xff0c;即只让其在首次进入距离传感器测试界面时弹出&#…...

Dell笔记本电脑 启动时提示解决

https://www.dell.com/support/kbdoc/en-us/000139731/what-the-headless-operation-mode-active-post-message-means-and-how-to-stop-it-appearing-during-start-up dell官方解释&#xff1a; 提示来自于BIOS/UEFI固件中POST Behaviar&#xff0c;只要打开了忽略警告、错误…...

【人工智能Ⅰ】7-KNN 决策树

【人工智能Ⅰ】7-KNN & 决策树 7-1 KNN&#xff08;K near neighbour&#xff09; 思想&#xff1a;一个样本与数据集中的k个样本最相似&#xff0c;若这k个样本大多数属于某类别&#xff0c;则该个样本也属于这类别 距离度量 样本相似性用欧氏距离定义 L p ( x i , x…...

雷达导论PART I.2 核心原理与信号处理 2024-1-18

1. 雷达信号处理的核心原理 雷达系统通过发射电磁波并接收目标反射的回波信号来探测目标信息。这个看似简单的过程背后&#xff0c;其实蕴含着丰富的物理原理和精妙的信号处理技术。我们先从最基础的多普勒效应说起。 多普勒效应是雷达测速的核心原理。当目标与雷达之间存在相对…...

华硕笔记本合盖模式终极指南:告别外接显示器休眠烦恼

华硕笔记本合盖模式终极指南&#xff1a;告别外接显示器休眠烦恼 【免费下载链接】g-helper Lightweight, open-source control tool for ASUS laptops and ROG Ally. Manage performance modes, fans, GPU, battery, and RGB lighting across Zephyrus, Flow, TUF, Strix, Sca…...

从read()到硬盘:用strace和bpftrace动态追踪Linux内核文件读取的完整路径(附实战脚本)

从read()到硬盘&#xff1a;用strace和bpftrace动态追踪Linux内核文件读取的完整路径&#xff08;附实战脚本&#xff09; 当线上服务出现文件读取延迟时&#xff0c;大多数系统工程师的第一反应是检查磁盘I/O指标。但真正的挑战在于&#xff1a;如何准确定位从用户态系统调用到…...

如何快速实现jsTree上下文菜单:为树形节点添加智能右键操作功能

如何快速实现jsTree上下文菜单&#xff1a;为树形节点添加智能右键操作功能 【免费下载链接】jstree jquery tree plugin 项目地址: https://gitcode.com/gh_mirrors/js/jstree jsTree上下文菜单插件是jQuery树形插件中最实用的功能之一&#xff0c;它能让用户通过右键点…...

OpenClaw+千问3.5-9B:自动化学习笔记整理系统

OpenClaw千问3.5-9B&#xff1a;自动化学习笔记整理系统 1. 为什么需要自动化笔记整理 作为一个长期与技术文档打交道的开发者&#xff0c;我发现自己陷入了一个困境&#xff1a;每天阅读大量技术文章、论文和在线课程&#xff0c;但收集的笔记却散落在不同平台——有些在One…...

SGLang-v0.5.6应用教程:快速构建API服务,支持约束解码生成指定格式

SGLang-v0.5.6应用教程&#xff1a;快速构建API服务&#xff0c;支持约束解码生成指定格式 1. SGLang简介与核心能力 SGLang&#xff08;Structured Generation Language&#xff09;是一个专注于大模型推理优化的高性能框架。它通过创新的架构设计&#xff0c;有效解决了传统…...

OpenClaw多模型切换:Qwen3-32B与其他镜像的混合调度方案

OpenClaw多模型切换&#xff1a;Qwen3-32B与其他镜像的混合调度方案 1. 为什么需要多模型切换&#xff1f; 去年冬天&#xff0c;当我第一次尝试用OpenClaw自动化处理技术文档时&#xff0c;遇到了一个尴尬的问题&#xff1a;用同一个模型处理代码生成和内容润色&#xff0c;…...

别再纠结SGMII和RGMII了!从PCB布线到芯片选型,一次讲透千兆以太网接口怎么选

千兆以太网接口选型实战指南&#xff1a;从信号完整性到供应链决策 当你的项目进度表上出现"千兆以太网接口设计"这一项时&#xff0c;会议室里的空气总会突然凝固。硬件团队在白板上画着信号拓扑图&#xff0c;嵌入式工程师盯着芯片手册皱眉&#xff0c;项目经理则在…...

学术研究利器:OpenClaw+gemma-3-12b-it自动整理文献综述

学术研究利器&#xff1a;OpenClawgemma-3-12b-it自动整理文献综述 1. 为什么需要自动化文献整理工具 作为一名经常需要阅读大量文献的研究者&#xff0c;我深刻体会到手动整理文献的痛点。每次写论文前&#xff0c;我需要花费数小时甚至数天时间从几十篇PDF中提取关键信息&a…...

嵌入式 AI 助手的三层意图识别架构:如何在“快、准、稳“之间取得平衡

背景 我在开发一个项目协同平台的嵌入式 AI 助手。它不是独立的 chatbot&#xff0c;而是嵌在业务页面里的——用户可以在首页、项目详情页、任务抽屉等不同位置唤起它&#xff0c;用自然语言完成任务查询、创建、删除等操作。 和通用对话 AI 不同&#xff0c;这个助手有两个硬…...