QueryWrapper多表查询详解

一、QueryWrapper多表查询实现

QueryWrapper是MyBatis-Plus的查询封装,由于它可以用来构建SQL语句,可以通过它进行多表查询。
下面是一个简单的多表查询示例,查询`user`和`role`表。

QueryWrapper wrapper = new QueryWrapper();
wrapper.select("u.id", "u.name", "r.id as roleId", "r.name as roleName")
       .from("user u")
       .leftJoin("user_role ur ON u.id = ur.user_id")
       .leftJoin("role r ON ur.role_id = r.id")
       .eq("u.name", "tom");
List<Map> result = userMapper.selectMaps(wrapper);

QueryWrapper首先使用select方法从不同的表中选择要查询的列。在这个例子中,我们使用了user表的id和name字段,以及role表的id和名称字段。
紧接着,我们使用from方法引用我们要查询的表,使用leftJoin方法连接多个表。
最后,我们使用eq方法限制查询条件,这里是限制user表的name等于“tom”。
调用selectMaps方法返回的是列表,其中元素包含指定列的值。

二、QueryWrapper多表查询条件

QueryWrapper可以通过条件来筛选返回结果。
例如,下面的示例查询user表和role表,并通过role表的name、user表的age以及user表的name作为查询条件:

QueryWrapper wrapper = new QueryWrapper();
wrapper.select("u.id", "u.name", "r.id as roleId", "r.name as roleName")
       .from("user u")
       .leftJoin("user_role ur ON u.id = ur.user_id")
       .leftJoin("role r ON ur.role_id = r.id")
       .eq("r.name", "管理员")
       .ge("u.age", 18)
       .like("u.name", "张%");
List<Map> result = userMapper.selectMaps(wrapper);

以下是上面select,from,leftJoin等方法的说明:
select:选择要查询的列,可以使用聚合函数或起别名,例如上面的“r.name as roleName”。
from:我们将user表与多个表进行连接操作,可以使用leftJoin,rightJoin,innerJoin等方法。
eq,ge,like:分别对应等于,大于等于,包含等于等操作符。

三、QueryWrapper多表查询分页

在实际应用中,我们通常需要对查询结果进行分页。MyBatis-Plus提供了IPage接口,可以轻松地实现分页功能。通过selectMapsPage方法,既可以进行分页查询。

IPage<Map> page = new Page(1, 10); // 第1页,每页10条数据
QueryWrapper wrapper = new QueryWrapper();
wrapper.select("u.id", "u.name", "r.id as roleId", "r.name as roleName")
       .from("user u")
       .leftJoin("user_role ur ON u.id = ur.user_id")
       .leftJoin("role r ON ur.role_id = r.id")
       .eq("r.name", "管理员")
       .ge("u.age", 18)
       .like("u.name", "张%");
IPage<Map> result = userMapper.selectMapsPage(page, wrapper);

以上代码将返回第一页(每页10条记录)符合条件的结果。其中,Page是分页模型,它接收两个参数:当前页和每页大小。
我们可以使用IPage接口及其实现类Page,选择要查询的列,并通过selectMapsPage方法进行分页查询。

四、QueryWrappear常用操作符

除了上面介绍的eq,ge,like等常用操作符,QueryWrapper还提供了其他常用操作符,如下表所示:

方法 说明
eq 等于
ne 不等于
gt 大于
lt 小于
ge 大于等于
le 小于等于
like 包含
notLike 不包含
isNull 为空
isNotNull 不为空
in 在指定范围内查询
notIn 不在指定范围查询
between 在指定范围内查询
notBetween 不在指定范围查询
orderByAsc 升序排序
orderByDesc 降序排序

五、QueryWrapper总结

QueryWrapper是MyBatis-Plus的查询封装,它可以用来构建SQL语句,可以通过它进行多表查询。
本文介绍了如何使用QueryWrapper对多个表进行联接,以及如何使用常用操作符对查询结果进行条件筛选和排序。

QueryWrapper非常强大,可适用于各种场景,掌握它的用法对于快速、高效地完成开发任务是非常有帮助的。

原创文章,作者:小蓝,如若转载,请注明出处:https://www.506064.com/n/271640.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
小蓝小蓝
上一篇 2024-12-16 19:23
下一篇 2024-12-16 19:23

相关推荐

  • Linux sync详解

    一、sync概述 sync是Linux中一个非常重要的命令,它可以将文件系统缓存中的内容,强制写入磁盘中。在执行sync之前,所有的文件系统更新将不会立即写入磁盘,而是先缓存在内存…

    编程 2025-04-25
  • 神经网络代码详解

    神经网络作为一种人工智能技术,被广泛应用于语音识别、图像识别、自然语言处理等领域。而神经网络的模型编写,离不开代码。本文将从多个方面详细阐述神经网络模型编写的代码技术。 一、神经网…

    编程 2025-04-25
  • Java BigDecimal 精度详解

    一、基础概念 Java BigDecimal 是一个用于高精度计算的类。普通的 double 或 float 类型只能精确表示有限的数字,而对于需要高精度计算的场景,BigDeci…

    编程 2025-04-25
  • nginx与apache应用开发详解

    一、概述 nginx和apache都是常见的web服务器。nginx是一个高性能的反向代理web服务器,将负载均衡和缓存集成在了一起,可以动静分离。apache是一个可扩展的web…

    编程 2025-04-25
  • 详解eclipse设置

    一、安装与基础设置 1、下载eclipse并进行安装。 2、打开eclipse,选择对应的工作空间路径。 File -> Switch Workspace -> [选择…

    编程 2025-04-25
  • Python输入输出详解

    一、文件读写 Python中文件的读写操作是必不可少的基本技能之一。读写文件分别使用open()函数中的’r’和’w’参数,读取文件…

    编程 2025-04-25
  • MPU6050工作原理详解

    一、什么是MPU6050 MPU6050是一种六轴惯性传感器,能够同时测量加速度和角速度。它由三个传感器组成:一个三轴加速度计和一个三轴陀螺仪。这个组合提供了非常精细的姿态解算,其…

    编程 2025-04-25
  • Python安装OS库详解

    一、OS简介 OS库是Python标准库的一部分,它提供了跨平台的操作系统功能,使得Python可以进行文件操作、进程管理、环境变量读取等系统级操作。 OS库中包含了大量的文件和目…

    编程 2025-04-25
  • git config user.name的详解

    一、为什么要使用git config user.name? git是一个非常流行的分布式版本控制系统,很多程序员都会用到它。在使用git commit提交代码时,需要记录commi…

    编程 2025-04-25
  • Linux修改文件名命令详解

    在Linux系统中,修改文件名是一个很常见的操作。Linux提供了多种方式来修改文件名,这篇文章将介绍Linux修改文件名的详细操作。 一、mv命令 mv命令是Linux下的常用命…

    编程 2025-04-25

发表回复

登录后才能评论