MybatisPlus详细使用

文章目录

    • 一、Mybatis Plus的使用步骤
    • 二、常见注解
    • 三、常见配置
    • 四、核心功能
      • 4.1、条件构造器
      • 4.2、自定义sql
      • 4.3、Service接口
    • 五、LambdaQueryWrapper常用方法详解

一、Mybatis Plus的使用步骤

1、引入MybatisPlus的起步依赖
MyBatisPlus官方提供了starter,其中集成了Mybatis和MybatisPlus的所有功能,并且实现了自动装配效果。因此我们可以用MybatisPlus的starter代替Mybatis的starter:

【SpringBoot3集成Mybatis-plus】启动报错问题解决https://blog.csdn.net/m0_71469568/article/details/135427094

        <!--    mybatis-plus依赖--><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.5.3</version></dependency>

2、定义Mapper
自定义的Mapper继承MybatisPlus提供的BaseMapper接口

public interface UserMapper extends BaseMapper<User> {}

在这里插入图片描述

二、常见注解

MyBatisPlus通过扫描实体类,通过反射获取实体类的属性作为信息表的信息
在这里插入图片描述
常见注解

@TableName:用来指定表名
@TbaleId:用来指定主键字段信息
@TableField:用来指定表中普通字段名@TableField常见场景
成员变量名与数据库字段名不一致
成员变量名以is开头,且是布尔值
成员变量名与数据库关键字冲突
成员变量不是数据库字段
idType类型:
ATUO:数据库自增
INPUT:通过set方法输入
ASSIGN_ID:分配 ID,接pldentifierGenerator的方法nextld来生成id,默认实现类为DefaultldentifierGenerator雪花算法

在这里插入图片描述

三、常见配置

MyBatisPlus的配置项继承了MyBatis的原生配置和一些自己的配置
在这里插入图片描述

四、核心功能

4.1、条件构造器

Mybatis Plus支持各种复杂的增删改查语句,可以满足日常的开发要求在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

QueryWrapper和LambdaQueryWrapper通常用来构建select、delete、update的wliere条件部分
①查询出名字中带o的,存款大于等于1000元的人的id、username、info、balance字段

select id,username,info,balance from user where username like ? and balance >= ?

构造器,构造语句

// 1 构建查询条件
QueryWrapper<User> querywrapper = new QueryWrapper<>().select("id","username","info","balance").like("username","o").ge("balance",1000)// 2 查询
List<User> users = userMapper.selectList(wrapper)

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

update user set balance=2000 where username="jack"
// 1 更新数据
User user = new User()
user.setBalance(2000)
// 2 更新的条件
QueryWrapper<User> querywrapper = new QueryWrapper<>().eq("username","jack")
// 3 查询
userMapper.update(user,wrapper)

UpdateWrapper和LambdaUpdateWrapper通常只有在set语句比较特殊才使用

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

update set balance=balance-200 where id in (1,2,4)
List<long> ids = List.of(1L,2L,4L)
UpdateWrapper<User> wrapper = new UpdateWrapper<User>().setSql("balance=balance-200").in("id",ids);
userMapper.update(null,wrapper)

尽量使用LambdaQueryWrapper和LambdaUpdateWrapper,避免硬编码

// 1 构建查询条件
LambdaQueryWrapper<User> wrapper = new LambdaQueryWrapper<>().select(User::getId,User::getUsername,User::getInfo,User::getBalance).like(User::getUsername,"o").ge(User::getBalance,1000)// 2 查询
List<User> users = userMapper.selectList(wrapper)

4.2、自定义sql

我们可以利用MyBatisPlus的Wrapper来构建复杂的Where条件,然后自己定义SQL语句中剩下的部分。
需求:将id在指定范围的用户(例如1、2、4)的余额扣减指定值
在这里插入图片描述
①基于wrapper构建where条件

// 更新条件
List<long> ids = List.of(1L,2L,4L)
int amount = 200
// 构建条件
LambdaQueryWrapper<User> wrapper = new LambdaQueryWrapper<User>().in(User::getId,ids);
// 自定义sql方法调用
userMapper.updateBalanceByIds(wrapper,amount)

②在mapper方法参数中用Param注解声明wrapper变量名称,必须是ew

void updateBalanceByIds(@Param("ew") LambdaQueryWrapper<User> wrapper,@Param("amount") int amount)

③自定义SQL,并使用wrapper条件

<update id="updateBalanceByIds">update user  set balance = balance - #{amount} ${ew.customSqlSegment}
</update>

4.3、Service接口

Service接口
在这里插入图片描述
在这里插入图片描述

五、LambdaQueryWrapper常用方法详解

  1. eq() — 等于条件
    eq() 用于查询字段的值等于某个指定值。

    lambdaQueryWrapper.eq(User::getName, "John");
    

    解释:查询 name 字段等于 “John” 的记录。
    参数:
    第一个参数是实体类的字段(通过 Lambda 表达式传入)。
    第二个参数是与该字段进行比较的值。

  2. ne() — 不等于条件
    ne() 用于查询字段的值不等于某个指定值。

    lambdaQueryWrapper.ne(User::getAge, 25);
    

    解释:查询 age 字段不等于 25 的记录。

  3. gt() — 大于条件
    gt() 用于查询字段的值大于某个指定值。

    lambdaQueryWrapper.gt(User::getAge, 18);
    

    解释:查询 age 字段大于 18 的记录。

  4. lt() — 小于条件
    lt() 用于查询字段的值小于某个指定值。

    lambdaQueryWrapper.lt(User::getAge, 30);
    

    解释:查询 age 字段小于 30 的记录。

  5. ge() — 大于等于条件
    ge() 用于查询字段的值大于等于某个指定值。

    lambdaQueryWrapper.ge(User::getAge, 18);
    

    解释:查询 age 字段大于等于 18 的记录。

  6. le() — 小于等于条件
    le() 用于查询字段的值小于等于某个指定值。

    lambdaQueryWrapper.le(User::getAge, 30);
    

    解释:查询 age 字段小于等于 30 的记录。

  7. like() — 模糊查询
    like() 用于查询字段的值模糊匹配某个指定字符串。

    lambdaQueryWrapper.like(User::getName, "Jo");
    

    解释:查询 name 字段包含 “Jo” 的记录。

  8. likeLeft() — 左模糊查询
    likeLeft() 用于查询字段的值左边模糊匹配某个指定字符串。

    lambdaQueryWrapper.likeLeft(User::getName, "Jo");
    

    解释:查询 name 字段以 “Jo” 开头的记录。

  9. likeRight() — 右模糊查询
    likeRight() 用于查询字段的值右边模糊匹配某个指定字符串。

    lambdaQueryWrapper.likeRight(User::getName, "Jo");
    

    解释:查询 name 字段以 “Jo” 结尾的记录。

  10. in() — in 查询
    in() 用于查询字段的值在指定集合中的记录。

    lambdaQueryWrapper.in(User::getAge, 20, 25, 30);
    

    解释:查询 age 字段的值在 [20, 25, 30] 中的记录。

  11. notIn() — not in 查询
    notIn() 用于查询字段的值不在指定集合中的记录。

    lambdaQueryWrapper.notIn(User::getAge, 20, 25, 30);
    

    解释:查询 age 字段的值不在 [20, 25, 30] 中的记录。

  12. between() — 范围查询
    between() 用于查询字段的值在某个范围内的记录。

    lambdaQueryWrapper.between(User::getAge, 18, 30);
    

    解释:查询 age 字段的值在 18 到 30 之间的记录。

  13. notBetween() — 不在某个范围内查询
    notBetween() 用于查询字段的值不在某个范围内的记录。

    lambdaQueryWrapper.notBetween(User::getAge, 18, 30);
    

    解释:查询 age 字段的值不在 18 到 30 之间的记录。

  14. isNull() — 判断字段为 null
    isNull() 用于查询字段的值为 null 的记录。

    lambdaQueryWrapper.isNull(User::getEmail);
    

    解释:查询 email 字段为 null 的记录。

  15. isNotNull() — 判断字段不为 null
    isNotNull() 用于查询字段的值不为 null 的记录。

    lambdaQueryWrapper.isNotNull(User::getEmail);
    

    解释:查询 email 字段不为 null 的记录。

  16. orderByAsc() — 按字段升序排序
    orderByAsc() 用于根据指定字段升序排序。

    lambdaQueryWrapper.orderByAsc(User::getAge);
    

    解释:根据 age 字段升序排序。

  17. orderByDesc() — 按字段降序排序
    orderByDesc() 用于根据指定字段降序排序。

    lambdaQueryWrapper.orderByDesc(User::getAge);
    

    解释:根据 age 字段降序排序。

  18. last() — 追加 SQL 片段
    last() 用于在 SQL 的最后追加自定义的 SQL 片段。

    lambdaQueryWrapper.last("LIMIT 10");
    

    解释:会在最终生成的 SQL 中追加 LIMIT 10,限制查询返回的记录数为 10。

  19. select() — 指定查询字段
    select() 用于指定查询的字段。

    lambdaQueryWrapper.select(User::getName, User::getAge);
    

    解释:查询 name 和 age 字段。

  20. or() — 或条件
    or() 用于构建 OR 条件查询。

    lambdaQueryWrapper.eq(User::getName, "John").or().eq(User::getAge, 30);
    

    解释:查询 name 等于 “John” 或者 age 等于 30 的记录。

  21. groupBy() — 分组查询
    groupBy() 用于 SQL 的 GROUP BY 子句。

    lambdaQueryWrapper.groupBy(User::getAge);
    

    解释:按 age 字段进行分组。

  22. having() — 分组查询条件
    having() 用于设置分组后的条件。

    lambdaQueryWrapper.groupBy(User::getAge).having("COUNT(*) > 1");
    

    解释:对 age 字段分组后,筛选出人数大于 1 的分组。

  23. nested() — 嵌套条件查询
    nested() 用于嵌套一组查询条件,生成括号条件。

    lambdaQueryWrapper.nested(w -> w.lt(User::getAge, 30).or().eq(User::getName, "John"));
    

    解释:构建 ((age < 30) OR (name = “John”)) 的查询条件。

  24. lambda() — 用于链式调用中的 Lambda 表达式
    在某些复杂的查询条件中,可以使用 lambda() 来清晰地组织多个条件。

    lambdaQueryWrapper.lambda().eq(User::getName, "John").lt(User::getAge, 30);
    

    解释:同 eq 和 lt,但使用 lambda() 方法可以增强代码的可读性。

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

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

相关文章

Spring项目-抽奖系统(实操项目-用户管理接口)(END)

^__^ (oo)\______ (__)\ )\/\ ||----w | || || 一&#xff1a;前言&#xff1a; 活动创建及展示博客链接&#xff1a;Spring项目-抽奖系统(实操项目-用户管理接口)(THREE)-CSDN博客 上一次完成了活动的创建和活动的展示&#xff0c;接下来就是重头戏—…

宝塔webhooks与码云实现自动部署

1. 宝塔面板配置Webhook 登录宝塔面板&#xff0c;进入「软件商店」→ 搜索「Webhook」并安装。添加Webhook&#xff1a; 名称&#xff1a;自定义&#xff08;如 Gitee自动部署&#xff09;脚本&#xff1a;编写部署脚本&#xff0c;示例如下&#xff1a;#!/bin/bash# 项目路径…

springboot之集成Elasticsearch

目录 二、Elasticsearch 是什么&#xff1f;三、Elasticsearch 安装四、Springboot 集成 Elasticsearch 的方式五、创建项目集成 Elasticsearch 2.创建 Spring Initializr 项目 es &#xff08;3&#xff09;.新建实体类 User&#xff08;4&#xff09;.新建 dao 接口类 UserR…

FFmpeg入门:最简单的音频播放器

FFmpeg入门&#xff1a;最简单的音频播放器 欢迎大家来到FFmpeg入门的第二章&#xff0c;今天只做一个最简单的FFmpeg音频播放器&#xff1b;同样&#xff0c;话不多说&#xff0c;先上流程图 流程图 以上流程和视频播放器的解码过程基本上是一致的&#xff1b; 不同点在于 S…

Hive-08之数据仓库之建模、分析

一、目标 掌握数据仓库基本概念熟悉数据仓库的模型建立 二、知识要点 1. 数据仓库基本介绍 英文名称为Data Warehouse&#xff0c;可简写为DW或DWH。数据仓库的目的是构建面向分析的集成化数据环境&#xff0c;为企业提供决策支持&#xff08;Decision Support&#xff09;…

【前端基础】3、HTML的常用元素(h、p、img、a、iframe、div、span)、不常用元素(strong、i、code、br)

HTML结构 一个HTML包含以下部分&#xff1a; 文档类型声明html元素 head元素body元素 例&#xff08;CSDN&#xff09;&#xff1a; 一、文档类型声明 HTML最一方的文档称为&#xff1a;文档类型声明&#xff0c;用于声明文档类型。即&#xff1a;<!DOCTYPE html>…

车载以太网-基于linux的ICMP协议

对于车载以太网-ICMP的技术要求: /** ICMP报文格式解析* -----------------* ICMP协议用于网络诊断和错误报告,常见应用包括Ping测试。* ICMP报文结构包括:IP头部、ICMP头部和ICMP数据部分。* 下面详细介绍每个部分的结构、字段的作用以及如何解析它们。* * ICMP头部结构:*…

Let‘s Encrypt 获取免费SSL证书

1、Lets Encrypt Lets Encrypt 官网点击这里 &#xff1a; 她推荐使用 Certbot 客户端请求证书&#xff0c;直接访问 Certbot 站点开干 &#xff1a; Certbot 2、Certbot 站点首页上直接选择操作系统和服务器软件&#xff0c;页面直接给出操作步骤 非常简单&#xff0c;…

tin这个单词怎么记

英语单词 tin&#xff0c;一般用作名词&#xff0c;意为“罐头&#xff1b;锡”&#xff1a; tin n.锡&#xff1b;罐头&#xff1b;罐&#xff1b;罐头盒&#xff1b;(盛涂料、胶水等的)马口铁罐&#xff0c;白铁桶&#xff1b;罐装物&#xff1b;金属食品盒&#xff1b;烘焙…

(十 三)趣学设计模式 之 模版方法模式!

目录 一、 啥是模板方法模式&#xff1f;二、 为什么要用模板方法模式&#xff1f;三、 模板方法模式的实现方式四、 模板方法模式的优缺点五、 模板方法模式的应用场景六、 总结 &#x1f31f;我的其他文章也讲解的比较有趣&#x1f601;&#xff0c;如果喜欢博主的讲解方式&a…

GitLab Pages 托管静态网站

文章目录 新建项目配置博客添加 .gitlab-ci.yml其他配置 曾经用 Github Pages 来托管博客内容&#xff0c;但是有一些不足&#xff1a; 在不科学上网的情况下&#xff0c;是没法访问的&#xff0c;或者访问速度非常慢代码仓库必须是公开的&#xff0c;如果设置为私有&#xff0…

redis --- 相关基础知识整理

目录 一、基本1、数据结构2、有序集合的编码1. 压缩列表&#xff08;Ziplist&#xff09;2. 跳跃列表&#xff08;SkipList&#xff09;3. 动态转换机制 二、应用场景三、持久化1、 RDB 持久化2、 AOF 持久化3、 混合持久化&#xff08;RDB AOF&#xff09;4、 RDB和AOF的对比…

想学大模型,但分不清longchain,huggingface,ollama各种工具之间区别?

总结就一句话&#xff0c;按需选择。 1. Hugging Face&#xff1a;AI 模型的“GitHub” Hugging Face 是 开源模型的集散地&#xff0c;相当于大模型界的 GitHub。这里有数万个预训练模型&#xff08;比如 Llama、Mistral&#xff09;&#xff0c;覆盖文本生成、翻译、代码补全…

开源PDF解析工具olmOCR

olmOCR 是由 Allen Institute for Artificial Intelligence (AI2) 的 AllenNLP 团队开发的一款开源工具&#xff0c;旨在将PDF文件和其他文档高效地转换为纯文本&#xff0c;同时保留自然的阅读顺序。它支持表格、公式、手写内容等。 olmOCR 经过学术论文、技术文档和其他文档…

基于Spring Boot和Vue的餐饮管理系统设计与实现

大家好&#xff0c;今天要和大家聊的是一款基于Spring Boot和Vue的餐饮管理系统的设计与实现。项目源码以及部署相关事宜请联系我&#xff0c;文末附上联系方式。 项目简介 基于Spring Boot和Vue的餐饮管理系统设计与实现的主要使用者分为管理员、员工和用户。没有授权的用户无…

HTTP/2 服务器端推送:FastAPI实现与前端集成指南

HTTP/2 服务器端推送&#xff1a;FastAPI实现与前端集成指南 注意&#xff1a;本文末尾附有完整示例代码&#xff0c;文中仅展示核心关键代码。完整代码可在GitHub仓库获取。 本文将会讲解HTTP2协议和相关配置实践。但是不要混淆&#xff0c;SSE的实现完全基于HTTP/1.1的持久连…

二、QT和驱动模块实现智能家居-----4、编译Qt程序并运行

一、编译QT程序 第1步 修改界面&#xff1a; 双击左侧的 Forms 里的 mainwindow.ui 文件&#xff0c;打开 Design 视图。 然后如下图所示&#xff0c;从左侧Display Widgets 栏目下&#xff0c;拖动 Label 和 PushPutton到中间的区域。 第2步 添加测试代码&#xff1a; 第3步…

HTTP四次挥手是什么?

四次挥手&#xff0c;这是TCP协议用来关闭连接的过程。四次挥手是确保两个主机之间能够安全、可靠地关闭连接的重要机制。我会用简单易懂的方式来讲解&#xff0c;帮助你理解它的原理和过程。 1. 什么是四次挥手&#xff1f; 定义 四次挥手是TCP协议用来关闭连接的过程。它通…

java+jvm笔记

JUC synchornized原理&#xff08;java锁机制&#xff09;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01; 升级顺序&#xff1a; 无锁偏向锁&#xff0c;只有一个线程来访问轻量级锁&#xff0c;有两个线程交替访问重锁&#xff0c;两个及以上线…

idea + Docker + 阿里镜像服务打包部署

一、下载docker desktop软件 官网下载docker desktop&#xff0c;需要结合wsl使用 启动成功的画面(如果不是这个画面例如一直处理start或者是stop需要重新启动&#xff0c;不行就重启电脑) 打包成功的镜像在这里&#xff0c;如果频繁打包会导致磁盘空间被占满&#xff0c;需…