wrapper.eq("u.del_flag", UserConstants.USER_NORMAL) .eq(ObjectUtil.isNotNull(user.getUserId()), "u.user_id", user.getUserId()) .like(StringUtils.isNotBlank(user.getUserName()), "u.user_name", user.getUserName()) .eq(StringUtils.isNotBlank(user.getStatus()), "u.status", user.getStatus()) .like(StringUtils.isNotBlank(user.getPhonenumber()), "u.phonenumber", user.getPhonenumber()) .between(params.get("beginTime") != null && params.get("endTime") != null, "u.create_time", params.get("beginTime"), params.get("endTime")) .and(ObjectUtil.isNotNull(user.getDeptId()), w -> { List<SysDept> deptList = deptMapper.selectList(new LambdaQueryWrapper<SysDept>() .select(SysDept::getDeptId) .apply(DataBaseHelper.findInSet(user.getDeptId(), "ancestors"))); List<Long> ids = StreamUtils.toList(deptList, SysDept::getDeptId); ids.add(user.getDeptId()); w.in("u.dept_id", ids); }).orderByAsc("u.user_id");
时间: 2025-06-22 09:31:09 浏览: 23
<think>好的,我现在需要帮用户找到关于MyBatis-Plus Wrapper构建复杂查询的示例,特别是包含eq、like、between和in条件的用法。首先,我得回想一下MyBatis-Plus的文档内容,或者常见的示例结构。用户提到的这些条件都是QueryWrapper中常用的方法,可能需要组合使用。
首先,用户需要的是复杂查询的示例,所以可能需要一个包含多个条件的例子。例如,eq是等于,like是模糊查询,between是范围查询,in是包含在某个集合内。我需要确保每个条件都正确使用,并且参数传递正确。
接下来,我需要考虑如何将这些条件组合到一个QueryWrapper实例中。例如,用户可能需要查询名字包含某个字符串,状态等于某个值,年龄在某个区间,同时ID在某个列表里。这样的组合查询比较典型,可以覆盖用户的需求。
然后,要注意MyBatis-Plus中的链式调用,比如.eq().like().between().in()这样的方法连续调用是否正确。同时,是否需要使用lambda表达式来避免字段名的硬编码,这可能会让代码更安全,尤其是在字段名变化时。
另外,用户可能还关心条件之间的逻辑关系,比如是AND还是OR。默认情况下,QueryWrapper的条件是用AND连接的,但如果需要OR,可能需要使用or()方法。不过用户的问题中没有提到OR,所以可能暂时不需要处理,但可以稍微提一下以备参考。
还需要考虑示例的完整性,比如实体类的定义,以及如何在Service或Mapper层中使用这个Wrapper。不过用户主要需要的是Wrapper的构建示例,所以可能不需要完整的DAO层代码,但给出一个完整的示例片段会更好。
然后,我需要检查是否有相关的引用内容。用户提供的引用是关于Spring Data和Querydsl的,可能和MyBatis-Plus无关,但可能用户希望看到类似的示例结构。不过根据问题,用户明确需要MyBatis-Plus的Wrapper示例,所以应该专注于MyBatis-Plus的文档和常见用法。
最后,生成相关问题的时候,需要考虑用户可能的后续疑问,比如动态条件、性能优化、与其他查询方式的比较,或者如何处理更复杂的条件组合。这些相关问题可以帮助用户进一步探索。</think>以下是一个使用MyBatis-Plus的`QueryWrapper`构建包含$eq$、$like$、$between$和$in$条件的复杂查询示例:
```java
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper
// eq条件:status = 1
.eq("status", 1)
// like条件:name LIKE '%admin%'
.like("name", "admin")
// between条件:age BETWEEN 20 AND 30
.between("age", 20, 30)
// in条件:id IN (1,2,3,4)
.in("id", Arrays.asList(1, 2, 3, 4))
// 结果排序:按create_time降序
.orderByDesc("create_time");
List<User> users = userMapper.selectList(queryWrapper);
```
对于字段安全引用,建议使用Lambda表达式:
```java
LambdaQueryWrapper<User> lambdaQuery = new LambdaQueryWrapper<>();
lambdaQuery
.eq(User::getStatus, 1)
.like(User::getName, "admin")
.between(User::getAge, 20, 30)
.in(User::getId, Arrays.asList(1, 2, 3, 4));
```
$$ \text{条件组合逻辑表达式: } (status = 1) \land (name \like\ '%admin%') \land (age \in [20,30]) \land (id \in \{1,2,3,4\}) $$[^1]
阅读全文
相关推荐


















