Spring Boot系列:揭秘MybatisPlus,掌握查询的奥秘
2023-11-18 13:55:16
在上一篇文章中,我们已经对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的查询功能非常强大,可以满足各种查询需求。通过使用QueryWrapper
、Wrapper
接口和关联查询等功能,可以轻松构建复杂的查询条件,并查询出想要的数据。
希望这篇教程能够帮助你更好地掌握MybatisPlus的查询功能。如果你有其他问题,欢迎随时留言。