您的位置:

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