返回

Spring Boot系列:揭秘MybatisPlus,掌握查询的奥秘

后端

在上一篇文章中,我们已经对MybatisPlus的基本配置、实体类和CRUD操作进行了详细的介绍。本篇将继续探寻MybatisPlus的魅力,深入剖析其查询功能。我们将从简单的查询开始,逐步深入到复杂的查询,帮助你充分掌握MybatisPlus查询构建的精髓。

简单查询

在MybatisPlus中,最简单的查询就是使用selectOne()selectList()selectCount()等方法。这些方法可以直接查询出结果集,而不需要像MyBatis那样编写SQL语句。例如:

User user = userService.selectOne(new QueryWrapper<User>().eq("name", "张三"));
List<User> users = userService.selectList(new QueryWrapper<User>().gt("age", 18));
long count = userService.selectCount(new QueryWrapper<User>().eq("gender", "男"));

条件构造器

如果需要进行更复杂的查询,可以使用MybatisPlus提供的QueryWrapper类。QueryWrapper是一个条件构造器,可以帮助你轻松构建查询条件。例如:

QueryWrapper<User> queryWrapper = new QueryWrapper<User>()
    .eq("name", "张三")
    .gt("age", 18)
    .eq("gender", "男");
List<User> users = userService.selectList(queryWrapper);

在上面的代码中,我们使用QueryWrapper构建了查询条件,并将其作为参数传递给selectList()方法。这样,就可以查询出满足指定条件的所有用户。

条件查询

QueryWrapper还支持丰富的条件查询操作,例如:

  • 等于:eq()
  • 不等于:ne()
  • 大于:gt()
  • 小于:lt()
  • 大于等于:ge()
  • 小于等于:le()
  • 模糊查询:like()
  • 左模糊查询:likeLeft()
  • 右模糊查询:likeRight()
  • in查询:in()
  • not in查询:notIn()
  • is null查询:isNull()
  • is not null查询:isNotNull()
  • 空字符串查询:isEmptyString()
  • 非空字符串查询:isNotEmptyString()

这些操作可以组合使用,以构建更复杂的查询条件。例如:

QueryWrapper<User> queryWrapper = new QueryWrapper<User>()
    .eq("name", "张三")
    .gt("age", 18)
    .eq("gender", "男")
    .like("address", "北京");
List<User> users = userService.selectList(queryWrapper);

在上面的代码中,我们使用QueryWrapper构建了查询条件,并将其作为参数传递给selectList()方法。这样,就可以查询出满足指定条件的所有用户。

动态查询

MybatisPlus还支持动态查询,即根据不同的条件动态生成SQL语句。这可以通过使用Wrapper接口来实现。例如:

Wrapper<User> wrapper = new Wrapper<User>() {
    @Override
    public String getSqlSegment() {
        return "name = '张三' and age > 18 and gender = '男'";
    }
};
List<User> users = userService.selectList(wrapper);

在上面的代码中,我们使用了一个匿名内部类实现了Wrapper接口,并重写了getSqlSegment()方法来生成SQL语句。然后,我们将这个Wrapper对象作为参数传递给selectList()方法。这样,就可以查询出满足指定条件的所有用户。

关联查询

MybatisPlus还支持关联查询,即查询出实体及其关联实体的数据。这可以通过使用leftJoin()rightJoin()innerJoin()等方法来实现。例如:

List<User> users = userService.selectList(
    new QueryWrapper<User>()
        .leftJoin("order", "order.user_id = user.id")
        .select("user.name", "order.order_num")
);

在上面的代码中,我们使用leftJoin()方法将User表和Order表关联起来,并查询出了用户及其关联订单的数据。

总结

MybatisPlus的查询功能非常强大,可以满足各种查询需求。通过使用QueryWrapperWrapper接口和关联查询等功能,可以轻松构建复杂的查询条件,并查询出想要的数据。

希望这篇教程能够帮助你更好地掌握MybatisPlus的查询功能。如果你有其他问题,欢迎随时留言。