概述
QueryWrapper
是 MyBatis-Plus 提供的一个用于构建 SQL 查询条件的工具类。它简化了查询条件的构建,使得编写复杂的查询变得更加直观和简洁。
详细介绍
QueryWrapper
是 MyBatis-Plus 框架中的一个类,旨在帮助开发者构建动态 SQL 查询。它可以用来指定查询条件、排序、分页等。QueryWrapper
提供了丰富的 API,支持常见的 SQL 操作,如 WHERE
条件、排序、分组、联合查询等。
核心功能
- 条件构造:支持
eq
,ne
,gt
,lt
,like
,between
等多种条件操作符。 - 排序:可以通过
orderByAsc
,orderByDesc
来指定排序规则。 - 分页:虽然
QueryWrapper
本身不处理分页,但可以和Page
对象结合使用来实现分页查询。 - 多条件组合:可以通过
and
,or
,nested
等方法实现复杂的查询逻辑。
应用场景
- 动态查询:构建复杂的动态查询条件,适用于用户筛选条件不确定的场景。
- 简化代码:减少手写 SQL 的复杂度,使得代码更加清晰易懂。
- 快速开发:提高开发效率,减少维护成本。
示例代码
假设你有一个 User
实体类,包含 id
, name
, age
和 email
等字段。你想要根据不同的查询条件进行用户查询。
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.IService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
// 实体类
public class User {
private Long id;
private String name;
private Integer age;
private String email;
// getters and setters
}
// Mapper 接口
public interface UserMapper extends BaseMapper<User> {
}
// Service 接口
public interface UserService extends IService<User> {
}
// Service 实现类
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService {
public List<User> findUsers(String name, Integer minAge, Integer maxAge) {
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
// 动态构建查询条件
if (name != null) {
queryWrapper.like("name", name);
}
if (minAge != null) {
queryWrapper.ge("age", minAge);
}
if (maxAge != null) {
queryWrapper.le("age", maxAge);
}
// 排序
queryWrapper.orderByAsc("age");
return list(queryWrapper);
}
}
关键点说明
QueryWrapper
对象的创建:通过new QueryWrapper<User>()
创建一个QueryWrapper
实例。- 条件设置:使用
like
,ge
,le
等方法来设置查询条件。你可以使用其他方法,如eq
(等于),ne
(不等于),gt
(大于),lt
(小于),between
(在两个值之间),in
(在某些值中)等。 - 排序:通过
orderByAsc
和orderByDesc
来指定排序字段和排序方式。 - 动态条件:可以根据不同的业务逻辑动态地添加查询条件,使得代码更加灵活。
使用 QueryWrapper
可以有效地减少手写 SQL 的复杂性,同时保持代码的可读性和可维护性。