- QueryWrapper 简介
- QueryWrapper 是 MyBatis - Plus 提供的一个条件构造器,用于构建 SQL 查询的条件。它可以帮助我们方便地进行各种复杂的查询操作,比如等于、不等于、大于、小于、模糊查询等。通过它可以动态地构建查询条件,使代码更加灵活。
- 常用方法及案例
- eq(等于)方法
- 功能:用于构建等于条件,相当于 SQL 中的
column = value。 - 案例:
- 假设我们有一个
User实体类,其中有一个id字段和name字段。如果我们要查询id等于 1 的用户,代码如下:
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.example.demo.entity.User;
import com.example.demo.mapper.UserMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service
public class UserService {
@Autowired
private UserMapper userMapper;
public User findUserById(int id) {
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("id", id);
return userMapper.selectOne(queryWrapper);
}
}
- ne(不等于)方法
- 功能:用于构建不等于条件,相当于 SQL 中的
column!= value。 - 案例:
public List<User> findUsersNotById(int id) {
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.ne("id", id);
return userMapper.selectList(queryWrapper);
}
- gt(大于)方法
- 功能:用于构建大于条件,相当于 SQL 中的
column > value。 - 案例:
- 假设
User实体类中有一个age字段,要查询年龄大于 20 的用户:
public List<User> findUsersGreaterThanAge(int age) {
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.gt("age", age);
return userMapper.selectList(queryWrapper);
}
- ge(大于等于)方法
- 功能:用于构建大于等于条件,相当于 SQL 中的
column >= value。 - 案例:
public List<User> findUsersGreaterEqualAge(int age) {
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.ge("age", age);
return userMapper.selectList(queryWrapper);
}
- lt(小于)方法
- 功能:用于构建小于条件,相当于 SQL 中的
column < value。 - 案例:
public List<User> findUsersLessThanAge(int age) {
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.lt("age", age);
return userMapper.selectList(queryWrapper);
}
- le(小于等于)方法
- 功能:用于构建小于等于条件,相当于 SQL 中的
column <= value。 - 案例:
public List<User> findUsersLessEqualAge(int age) {
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.le("age", age);
return userMapper.selectList(queryWrapper);
}
- like(模糊查询)方法
- 功能:用于构建模糊查询条件,相当于 SQL 中的
column LIKE '%value%'。 - 案例:
public List<User> findUsersLikeName(String namePart) {
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.like("name", namePart);
return userMapper.selectList(queryWrapper);
}
- leftLike(左模糊查询)方法
- 功能:用于构建左模糊查询条件,相当于 SQL 中的
column LIKE '%value'。 - 案例:
public List<User> findUsersLeftLikeName(String nameStart) {
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.leftLike("name", nameStart);
return userMapper.selectList(queryWrapper);
}
- rightLike(右模糊查询)方法
- 功能:用于构建右模糊查询条件,相当于 SQL 中的
column LIKE 'value%'。 - 案例:
public List<User> findUsersRightLikeName(String nameEnd) {
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.rightLike("name", nameEnd);
return userMapper.selectList(queryWrapper);
}
- in(包含在指定集合中)方法
- 功能:用于构建
IN条件,相当于 SQL 中的column IN (value1, value2,...)。 - 案例:
public List<User> findUsersByIds(List<Integer> ids) {
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.in("id", ids);
return userMapper.selectList(queryWrapper);
}
- notIn(不包含在指定集合中)方法
- 功能:用于构建
NOT IN条件,相当于 SQL 中的column NOT IN (value1, value2,...)。 - 案例:
public List<User> findUsersNotByIds(List<Integer> ids) {
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.notIn("id", ids);
return userMapper.selectList(queryWrapper);
}
- orderByAsc(升序排序)方法
- 功能:用于按照指定字段升序排序,相当于 SQL 中的
ORDER BY column ASC。 - 案例:
public List<User> findUsersOrderByAgeAsc() {
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.orderByAsc("age");
return userMapper.selectList(queryWrapper);
}
- orderByDesc(降序排序)方法
- 功能:用于按照指定字段降序排序,相当于 SQL 中的
ORDER BY column DESC。 - 案例:
public List<User> findUsersOrderByAgeDesc() {
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.orderByDesc("age");
return userMapper.selectList(queryWrapper);
}
- groupBy(分组)方法
- 功能:用于构建分组条件,相当于 SQL 中的
GROUP BY column。 - 案例:
- 假设要按照部门分组查询用户数量(假设有一个
department字段):
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.example.demo.entity.User;
import com.example.demo.mapper.UserMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
import java.util.Map;
@Service
public class UserService {
@Autowired
private UserMapper userMapper;
public List<Map<String, Object>> groupUsersByDepartment() {
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.select("department", "count(*) as count");
queryWrapper.groupBy("department");
return userMapper.selectMaps(queryWrapper);
}
}
- having(分组后筛选)方法
- 功能:用于在分组后进行筛选,相当于 SQL 中的
HAVING condition。 - 案例:
- 要查询部门人数大于 3 的部门(基于上面的分组查询):
public List<Map<String, Object>> groupUsersByDepartmentHaving() {
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.select("department", "count(*) as count");
queryWrapper.groupBy("department");
queryWrapper.having("count > 3");
return userMapper.selectMaps(queryWrapper);
}