mybatisplus wrapper工具类
时间: 2025-04-12 20:05:13 浏览: 17
<think>好的,我需要帮助用户了解MyBatisPlus Wrapper工具类的使用方法和示例教程。首先,我应该回顾用户提供的引用内容,看看里面有没有相关的信息。引用[1]提到MyBatis-Plus的Wrapper使用教程和实例,引用[2]说明QueryWrapper的方法,引用[3]和[4]提到查询工具类和扩展工具类,用于简化条件构造和非空判断。
用户的问题是关于Wrapper工具类的用法,可能包括基本使用、条件构造、链式调用、Lambda表达式以及工具类优化。我需要结合这些引用内容,分步骤解释使用方法,并给出代码示例。同时,按照用户的要求,使用中文回答,数学表达式用$...$,独立公式用$$...$$,不过这里可能数学公式不多,但要注意格式。
首先,Wrapper的主要作用是构建查询条件,比如eq、ne、like等方法。需要举例说明如何创建QueryWrapper实例,并添加条件。例如,查询年龄大于18的用户,代码示例中可能用到wrapper.gt("age", 18)。
然后,链式调用是Wrapper的特点,可以连续添加多个条件。例如,查询名字包含"张"且年龄在20到30之间的用户,用wrapper.like("name","张").between("age",20,30)。
Lambda表达式部分,使用LambdaQueryWrapper可以避免硬编码字段名,比如用LambdaQueryWrapper<User> lqw = new LambdaQueryWrapper<>(); lqw.eq(User::getName, "张三")。这样更安全,减少错误。
工具类优化方面,引用[3]和[4]提到MybatisPlusQueryUtils和扩展工具类,用于处理非空判断。可以给出一个工具类示例,封装条件构建,避免重复代码。比如,如果参数不为空,才添加到条件中,减少冗余判断。
最后,生成相关问题,可能涉及性能优化、复杂条件构建、与分页结合使用等。需要确保问题与主题相关,并帮助用户进一步学习。
在写作过程中,要注意引用标记,比如在提到工具类时引用[^3]和[^4]。同时,确保代码示例正确,符合MyBatisPlus的语法,可能参考引用中的示例结构。需要检查是否有遗漏的要点,比如分页查询如何与Wrapper结合,这在引用[3]中提到过,可以加入示例。
总结步骤:介绍基本用法,链式调用,Lambda方式,工具类优化,分页示例,相关问题。确保每个部分都有代码示例,并正确引用来源。</think>### MyBatisPlus Wrapper工具类使用教程
MyBatisPlus的`Wrapper`工具类(如`QueryWrapper`、`LambdaQueryWrapper`)用于动态构建数据库操作条件,简化SQL拼接并提高代码可维护性。以下是详细使用方法及示例:
---
#### 一、基本条件构造
通过`QueryWrapper`直接添加条件,支持`eq`(等于)、`gt`(大于)、`like`(模糊查询)等方法:
```java
QueryWrapper<User> wrapper = new QueryWrapper<>();
wrapper.eq("name", "张三") // name = '张三'
.gt("age", 18) // age > 18
.like("email", "@test.com"); // email LIKE '%@test.com%'
List<User> users = userMapper.selectList(wrapper);
```
---
#### 二、链式调用与复杂条件
支持`and`、`or`嵌套逻辑,结合`apply`处理复杂表达式:
```java
wrapper.and(w -> w.lt("score", 60).or().isNull("status")) // (score < 60 OR status IS NULL)
.apply("DATE(create_time) = {0}", "2023-10-01"); // 动态参数注入
```
---
#### 三、Lambda表达式(类型安全)
使用`LambdaQueryWrapper`避免字段名硬编码,示例:
```java
LambdaQueryWrapper<User> lqw = new LambdaQueryWrapper<>();
lqw.eq(User::getRole, "admin") // role = 'admin'
.ge(User::getSalary, 5000); // salary >= 5000
userMapper.selectList(lqw);
```
---
#### 四、工具类优化非空判断
通过工具类封装条件构建,减少冗余代码(引用[^3]):
```java
public class QueryUtils {
public static <T> QueryWrapper<T> buildQuery(String name, Integer age) {
return new QueryWrapper<T>()
.like(StringUtils.isNotBlank(name), "name", name)
.gt(age != null, "age", age);
}
}
// 调用示例
QueryWrapper<User> wrapper = QueryUtils.buildQuery("李", 25);
List<User> users = userMapper.selectList(wrapper);
```
---
#### 五、结合分页查询
与`Page`对象配合实现分页(引用[^3]):
```java
Page<User> page = new Page<>(1, 10); // 第1页,每页10条
QueryWrapper<User> wrapper = new QueryWrapper<>();
wrapper.orderByDesc("create_time");
IPage<User> userPage = userMapper.selectPage(page, wrapper);
```
---
阅读全文
相关推荐


















