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

【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.lryc.cn/news/342020.html

相关文章:

  • 实时音视频通信的主要矛盾及解决方法
  • 【Delphi 爬虫库 4】使用封装好的 XML 解析库对 XML 数据进行解析
  • Flask简介
  • 神经网络中的归一化
  • 《从Paxos到Zookeeper》——第四、七章:基本概念及原理
  • 网络演进技术演进:裸纤专线、SDH、MSTP+、OTN、PTN、IP-RAN
  • MMC设备
  • 图片浏览器-PicView
  • 一些零碎小知识
  • 2.2 Java全栈开发前端+后端(全栈工程师进阶之路)-前端框架VUE3-基础-Vue基本语法
  • (Arxiv,2024)Mind the Modality Gap:通过跨模态对齐建立遥感视觉语言模型
  • 区块链 | 一文了解 NFT 的生态系统(上)
  • 为什么centos官方版不支持arm架构?
  • awk小尝试2(随手记)
  • Vue的项目启动指令分析
  • 年轻人刮疯了,刮刮乐断货了
  • 25 JavaScript学习:var let const
  • docker部署的nacos2.2x开启鉴权功能
  • 【数据结构与算法】之五道链表进阶面试题详解!
  • vue2实现生成二维码和复制保存图片功能(复制的同时会给图片加文字)
  • Redis之字符串类型深入之SDS底层结构
  • Cesium 3dTileset 支持 uv 和 纹理贴图
  • C++可变参数模板中的省略号
  • uni-ui 使用uni-icons有些图标显示不出来,如down,up图标
  • 动态增删表格
  • Java-(乘法表之后)增强for循环
  • Celery(分布式任务队列)入门学习笔记
  • 【网络】tcp协议如何保证可靠性
  • select,poll,epoll
  • 【48天笔试强训】day18