【JAVA进阶篇教学】第九篇:MyBatis-Plus用法介绍

博主打算从0-1讲解下java进阶篇教学,今天教学第九篇:MyBatis-Plus用法介绍。

在 MyBatis-Plus 3.5.0 中,LambdaQueryWrapper支持多种条件构造方式,除了等于(eq)、不等于(ne)、大于(gt)、小于(lt)、大于等于(ge)、小于等于(le)等基本的条件构造方式外,还包括模糊查询(like)、模糊查询不匹配值(notLike)、在列表中(in)、不在列表中(notIn)等。

本文以MyBatis-Plus 3.5.0版本讲述!

目录

一、依赖

二、基本使用

三、LambdaQueryWrapper条件构造

3.1 模糊查询 

3.2 排序

3.3 分页

3.4 结果封装

3.5 模糊查询不匹配值

3.6 在列表中(in)

3.7 不在列表中(notIn)

3.8 分组

四、方法和属性

五、mybatis-plus版本不同


一、依赖

        <dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.5.0</version></dependency>

二、基本使用

假设有一个BannerItem表,需要通过banner_id查出所有数据(查询List)。

public class BannerItem {private Long id;private String name;private String img;private String keyword;private Integer type;private Long bannerId;
}

 可以使用QueryWrapper进行查询,最基础的使用方式如下:

LambdaQueryWrapper<BannerItem> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(BannerItem::getBannerId, bannerId);
List<BannerItem> bannerItems = bannerItemMapper.selectList(wrapper);

三、LambdaQueryWrapper条件构造

// 等于
wrapper.eq(BannerItem::getBannerId, bannerId);
// 不等于
wrapper.ne(BannerItem::getBannerId, bannerId);
// 大于
wrapper.gt(BannerItem::getBannerId, bannerId);
// 小于
wrapper.lt(BannerItem::getBannerId, bannerId);
// 大于等于
wrapper.ge(BannerItem::getBannerId, bannerId);
// 小于等于
wrapper.le(BannerItem::getBannerId, bannerId);

3.1 模糊查询 

// 模糊查询
wrapper.like(BannerItem::getName, "%zhangsan%");

3.2 排序

// 排序
wrapper.orderByDesc(BannerItem::getCreateTime);

3.3 分页

// 分页
Page<BannerItem> page = new Page<>(1, 10);
wrapper.page(page);

3.4 结果封装

// 结果封装
List<BannerVO> bannerVOs = wrapper.map(BannerVO::new).list();

3.5 模糊查询不匹配值

// 模糊查询不匹配值
wrapper.notLike(BannerItem::getName, "%zhangsan%");

3.6 在列表中(in)

// 使用列表形式
ArrayList<Integer> arrayList = new ArrayList<>();
Collections.addAll(arrayList, 18, 20, 21);
lambdaQueryWrapper.in(User::getAge, arrayList);// 使用列举值形式
lambdaQueryWrapper.in(User::getAge, 18, 20, 21);

3.7 不在列表中(notIn)

// 使用列表形式
ArrayList<Integer> arrayList = new ArrayList<>();
Collections.addAll(arrayList, 18, 20, 21);
lambdaQueryWrapper.notIn(User::getAge, arrayList);// 使用列举值形式
lambdaQueryWrapper.notIn(User::getAge, 18, 20, 21);

3.8 分组

// 假设我们有一个 Order 实体类,包含 orderId(订单编号)和 customerId(客户编号)字段
LambdaQueryWrapper<Order> wrapper = new LambdaQueryWrapper<>();// 根据 customerId 进行分组
wrapper.groupBy(Order::getCustomerId);// 执行查询
List<Order> groupedOrders = orderMapper.selectList(wrapper);

四、方法和属性

方法

  1. eq:用于设置等于条件,例如queryWrapper.eq(User::getAge, 18)表示查询年龄等于 18 的用户。
  2. ne:用于设置不等于条件,例如queryWrapper.ne(User::getAge, 18)表示查询年龄不等于 18 的用户。
  3. lt:用于设置小于条件,例如queryWrapper.lt(User::getAge, 18)表示查询年龄小于 18 的用户。
  4. le:用于设置小于等于条件,例如queryWrapper.le(User::getAge, 18)表示查询年龄小于等于 18 的用户。
  5. gt:用于设置大于条件,例如queryWrapper.gt(User::getAge, 18)表示查询年龄大于 18 的用户。
  6. ge:用于设置大于等于条件,例如queryWrapper.ge(User::getAge, 18)表示查询年龄大于等于 18 的用户。
  7. like:用于设置模糊查询条件,例如queryWrapper.like(User::getUsername, "%zhang%")表示查询用户名包含"zhang"的用户。
  8. in:用于设置范围查询条件,例如queryWrapper.in(User::getAge, Arrays.asList(18, 20, 25))表示查询年龄在 18、20、25 中的用户。
  9. notIn:用于设置不在范围内的查询条件,例如queryWrapper.notIn(User::getAge, Arrays.asList(18, 20, 25))表示查询年龄不在 18、20、25 中的用户。
  10. between:用于设置范围查询条件,例如queryWrapper.between(User::getAge, 18, 25)表示查询年龄在 18 到 25 之间的用户。
  11. notBetween:用于设置不在范围内的查询条件,例如queryWrapper.notBetween(User::getAge, 18, 25)表示查询年龄不在 18 到 25 之间的用户。
  12. select:用于自定义查询结果的字段,例如queryWrapper.select(User::getUsername, User::getAge)表示查询用户名和年龄两个字段。
  13. orderBy:用于设置查询结果的排序规则,例如queryWrapper.orderByDesc(User::getAge)表示按照年龄降序排序查询结果。
  14. and:用于添加多个查询条件,例如queryWrapper.eq(User::getAge, 18).and(queryWrapper.like(User::getUsername, "%zhang%"))表示查询年龄等于 18 且用户名包含"zhang"的用户。
  15. or:用于添加多个查询条件,例如queryWrapper.eq(User::getAge, 18).or(queryWrapper.like(User::getUsername, "%zhang%"))表示查询年龄等于 18 或用户名包含"zhang"的用户。

属性

  1. sqlSegment:表示当前查询条件的SQL片段。

五、mybatis-plus版本不同

可能因为mybatis-plus版本不同,方法和属性有略微不同,请理性对待!

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

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

相关文章

tomcat篇-windows 运行tomcat的startup.bat时,终端打印的中文显示为乱码

当运行Tomcat的startup.bat时&#xff0c;如果终端中中文显示为乱码&#xff0c;这通常是因为Tomcat使用的日志输出编码与Windows命令行默认的编码不匹配。针对这一问题&#xff0c;你可以尝试以下步骤来解决&#xff1a; 1、执行startup.bat&#xff0c;在输出的窗口右击&…

【MyBatis】深入解析MyBatis:高效操作数据库技术详解

&#x1f493; 博客主页&#xff1a;从零开始的-CodeNinja之路 ⏩ 收录文章&#xff1a;【MyBatis】深入解析MyBatis&#xff1a;高效操作数据库技术详解 &#x1f389;欢迎大家点赞&#x1f44d;评论&#x1f4dd;收藏⭐文章 目录 动态SQL1. \<if>标签2. \<trim&…

Spring - 6 ( 9000 字 Spring 入门级教程 )

一&#xff1a; SpringBoot 配置文件 1.1 配置文件作用 配置文件通常是一个文本文件&#xff0c;其中包含了程序或系统的各种设置、选项和参数。比如C:\Users, C:\Windows 文件夹, 以及各种 .config, .xml 文件 配置文件主要是为了解决硬编码&#xff08;代码写死&#xff0…

专业渗透测试 Phpsploit-Framework(PSF)框架软件小白入门教程(一)

本系列课程&#xff0c;将重点讲解Phpsploit-Framework框架软件的基础使用&#xff01; 本文章仅提供学习&#xff0c;切勿将其用于不法手段&#xff01; Phpsploit-Framework&#xff08;简称 PSF&#xff09;框架软件&#xff0c;是一款什么样的软件呢&#xff1f; Phpspl…

模拟实现memcpy,memmove,memset,memcmp

memcpy void * memcpy ( void * destination, const void * source, size_t num ); 使用注意事项&#xff1a; 从source的位置向后复制num个字节数据到destination所指向的内存位置中。 这个函数遇到如果源空间和⽬标空间出现重叠&#xff0c;就得使⽤memmove函数处理。 …

【Linux入门】基础开发工具

本篇博客整理了Linux&#xff08;centOS版本&#xff09;中基础开发工具的用途和用法&#xff0c;旨在透过开发工具的使用&#xff0c;帮助读者更好地理解可执行程序的编写、编译、运行等。 目录 一、软件包管理器 yum 1.软件的下载与安装 2.Linux应用商店&#xff1a;yum …

C#描述-计算机视觉OpenCV(4):图像分割

C#描述-计算机视觉OpenCV&#xff08;4&#xff09;&#xff1a;图像分割 前言用 GrabCut 算法分割图像实例展示 前言 本文中如果有什么没说明的地方&#xff0c;大概率在前文中描述过了。 C#描述-计算机视觉OpenCV&#xff08;1&#xff09;&#xff1a;基础操作 C#描述-计算…

VTK —— 二、教程五 - 通过鼠标事件与渲染交互(附完整源码)

代码效果 本代码编译运行均在如下链接文章生成的库执行成功&#xff0c;若无VTK库则请先参考如下链接编译vtk源码&#xff1a; VTK —— 一、Windows10下编译VTK源码&#xff0c;并用Vs2017代码测试&#xff08;附编译流程、附编译好的库、vtk测试源码&#xff09; 教程描述 本…

Unity类银河恶魔城学习记录15-3 p155 More example on audio effects

Alex教程每一P的教程原代码加上我自己的理解初步理解写的注释&#xff0c;可供学习Alex教程的人参考 此代码仅为较上一P有所改变的代码 【Unity教程】从0编程制作类银河恶魔城游戏_哔哩哔哩_bilibili ​ AudioManager.cs using System.Collections; using System.Collections.…

XYCTF2024 RE Trustme 复现

但是只得到用户名 admin 法一&#xff1a;猜Sql注入&#xff0c;直接万能密码 法二&#xff1a;正常逆向 jadx中的AndroidManifest.xml有奇怪之处 怀疑有加壳&#xff0c;进ProxyApplication看看 大量安卓一代壳的特征 Android第一代壳加固原理及实现 - 知乎 GitHub - Huye…

基于双层优化的电动汽车优化调度研究(附matlab程序)

基于双层优化的电动汽车优化调度研究 0.代码链接 基于双层优化的电动汽车优化调度研究(matlab程序)资源-CSDN文库 1.简述 关键词&#xff1a;双层优化 选址定容 输配协同 时空优化 参考文档&#xff1a;《考虑大规模电动汽车接入电网的双层优化调度策略_胡文平》…

confluence 设置https代理

使用nginx反待confluence并开启https后&#xff0c;登录confluence会一直提示&#xff1a;scheme、proxyName、proxyPort设置错误。 解决办法&#xff1a; find / -name server.xmlvi /opt/atlassian/confluence/conf/server.xml HTTP反代配置 HTTPS反代配置

[leetcode] 61. 旋转链表

文章目录 题目描述解题方法遍历java代码复杂度分析 相似题目 题目描述 给你一个链表的头节点 head &#xff0c;旋转链表&#xff0c;将链表每个节点向右移动 k 个位置。 示例 1&#xff1a; 输入&#xff1a;head [1,2,3,4,5], k 2 输出&#xff1a;[4,5,1,2,3]示例 2&…

ICode国际青少年编程竞赛- Python-1级训练场-for循环练习

ICode国际青少年编程竞赛- Python-1级训练场-for循环练习 1、 for i in range(3):Dev.step(4)Dev.turnLeft()2、 for i in range(3):Dev.step(2)Dev.turnRight()Dev.step(2)Dev.turnLeft()3、 for i in range(3):Dev.step(2)Dev.turnRight()Dev.step(2)Dev.turnLeft()4、 for…

Deep learning Part Five RNN--24.4.29

接着上期&#xff0c;CBOW模型无法解决文章内容过长的单词预测的&#xff0c;那该如何解决呢&#xff1f; 除此之外&#xff0c;根据图中5-5的左图所示&#xff0c;在CBOW模型的中间层求单词向量的和&#xff0c;这时就会出现另一个问题的&#xff0c;那就是上下文的单词的顺序…

PC通过串口发送指令控制LED+串口中断

如何让单片机接收数据&#xff1f; 首先要打开SCON中的串行接收控制位REN。当REN1时为允许接收状态&#xff0c;可以接收信息。 因此令SCON 0x50&#xff1b; 怎么知道收到数据&#xff1f; 利用RI接收中断请求标志位。当串行接收到第8位结束时由内部硬件自动置为RI1&#…

机器人系统ros2-开发实践04-ROS2 中 tf2的定义及示例说明

1. what ros2 tf2 &#xff1f; tf2的全称是transform2&#xff0c;在ROS&#xff08;Robot Operating System&#xff09;中&#xff0c;它是专门用于处理和变换不同坐标系间位置和方向的库。这个名字来源于“transform”这个词&#xff0c;表示坐标变换&#xff0c;而“2”则…

【抽代复习笔记】17-群(十一):置换的练习题(1)

练习1&#xff1a;计算&#xff1a; 解&#xff1a; 解析&#xff1a;①左边的置换是1保持不变&#xff0c;2变成3&#xff0c;3变成4&#xff0c;4变成5&#xff0c;5变成2&#xff0c;因此可以简写为(2345)&#xff1b;右边的置换是2和5保持不变&#xff0c;1变成3&#xff…

k8s环境部署gpu以及CUDA兼容性分析

本文记录和学习在实用gpu搭建k8s支持上层应用时的功能实践和遇到的问题。 1. 基础概念 CUDA本质上就是NVIDIA专为通用高性能并行计算设计的一套计算平台和编程模型&#xff0c;换句话使用GPU并行编程的规范方法&#xff0c;所以CUDA在软件层面包含了众多库&#xff0c; 那这里…

万兴PDF专家 PDFelement Pro v10.3.8 破姐版!

&#x1f9d1;‍&#x1f4bb;万兴PDF专家 PDFelement Pro v10.3.8 破姐版 (https://docs.qq.com/sheet/DRVVxTHJ3RXJFVHVr)