MyBatis-Plus框架QueryWrapper查询构造器的使用入门

QueryWrapper 是 MyBatis-Plus 框架提供的一个强大的查询构造器,用于方便地构建 SQL 查询条件,避免手写复杂的 SQL 语句。下面从基本使用、常用方法、链式调用和复杂查询示例等方面详细介绍 QueryWrapper 的使用。

1. 引入依赖

首先要确保项目中已经引入了 MyBatis-Plus 的依赖。如果你使用的是 Maven,可以在 pom.xml 中添加以下依赖:

<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-boot-starter</artifactId>
    <version>最新版本号</version>
</dependency>

2. 基本使用

以下是一个简单的示例,展示如何使用 QueryWrapper 查询 User 表中年龄大于 18 岁的所有用户:

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.example.demo2.entity.User;
import com.example.demo2.mapper.UserMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
public class UserService {

    @Autowired
    private UserMapper userMapper;

    public List<User> getUsersByAgeGreaterThan18() {
        // 创建 QueryWrapper 对象
        QueryWrapper<User> queryWrapper = new QueryWrapper<>();
        // 添加查询条件:年龄大于 18
        queryWrapper.gt("age", 18);
        // 执行查询
        return userMapper.selectList(queryWrapper);
    }
}

在这个示例中:

  • 首先创建了一个 QueryWrapper<User> 对象,泛型 User 表示查询的实体类。
  • 然后使用 gt 方法添加查询条件,gtgreater than 的缩写,用于表示大于。
  • 最后调用 userMapper.selectList(queryWrapper) 方法执行查询,返回符合条件的用户列表。

3. 常用方法

3.1 等值查询(eq)

QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("name", "John"); // 查询姓名为 John 的用户
List<User> users = userMapper.selectList(queryWrapper);

3.2 模糊查询(like)

QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.like("name", "J"); // 查询姓名中包含 J 的用户
List<User> users = userMapper.selectList(queryWrapper);

3.3 范围查询(between)

QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.between("age", 18, 30); // 查询年龄在 18 到 30 之间的用户
List<User> users = userMapper.selectList(queryWrapper);

3.4 排序查询(orderByAsc/orderByDesc)

QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.orderByAsc("age"); // 按年龄升序排序
List<User> users = userMapper.selectList(queryWrapper);

3.5 逻辑查询(and/or)

QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("gender", "male").and(wrapper -> wrapper.gt("age", 18)); 
// 查询性别为男且年龄大于 18 岁的用户
List<User> users = userMapper.selectList(queryWrapper);

4. 链式调用

QueryWrapper 支持链式调用,让代码更加简洁:

QueryWrapper<User> queryWrapper = new QueryWrapper<>();
List<User> users = userMapper.selectList(
    queryWrapper.eq("gender", "male")
                .gt("age", 18)
                .orderByAsc("age")
);

5. 复杂查询示例

以下是一个复杂查询的示例,查询姓名中包含 J 且年龄在 20 到 30 岁之间,按年龄降序排序的用户:

QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.like("name", "J")
            .between("age", 20, 30)
            .orderByDesc("age");
List<User> users = userMapper.selectList(queryWrapper);

6. 条件判断

在实际开发中,查询条件可能是动态的,你可以根据不同的情况添加条件:

QueryWrapper<User> queryWrapper = new QueryWrapper<>();
String name = "J";
Integer minAge = 20;
Integer maxAge = 30;

if (name != null && !name.isEmpty()) {
    queryWrapper.like("name", name);
}
if (minAge != null && maxAge != null) {
    queryWrapper.between("age", minAge, maxAge);
}

List<User> users = userMapper.selectList(queryWrapper);
posted @ 2025-02-08 00:44  ToFuture$  阅读(2291)  评论(0)    收藏  举报