【项目实战】MyBatis-Plus中QueryWrapper和LambdaQueryWrapper介绍
发布时间
阅读量:
阅读量
一、两个构建SQL查询条件的类
在MyBatis-Plus框架中,默认提供QueryWrapper与LambdaQueryWrapper两类核心组件。其主要区别在于:LambdaQueryWrapper组件允许通过 Lambda 表达式实现查询条件配置;相比之下,默认的 QueryWrapper 不具备此类功能。
二、LambdaQueryWrapper介绍
2.1 LambdaQueryWrapper是什么?
LambdaQueryWrapper充当其框架中的查询条件生成器角色,在该框架内作为一个功能丰富且强大的工具存在。
2.2 LambdaQueryWrapper的优点
(1)该系统提供了利用Lambda表达式进行Query condition搭建的功能。(2)通过更加方便的方式搭建数据库Query逻辑,在编写自定义SQL语句时能够有效规避可能出现的错误。(3)系统具备类型安全功能,在语法检查阶段能够确保用户的Query逻辑正确无误。(4)该系统提供了利用Lambda expression进行Query condition搭建的功能,并能显著提升代码清晰度与可维护性。
2.3 使用LambdaQueryWrapper构建查询条件的示例
以下是一个使用LambdaQueryWrapper构建查询条件的示例:
//创建一个LambdaQueryWrapper对象,并传入你想查询的实体类作为参数。
LambdaQueryWrapper<User> wrapper = new LambdaQueryWrapper<>();
//查询名字为"John",年龄大于18的用户
wrapper.eq(User::getName, "John")
.gt(User::getAge, 18)
//按照创建时间降序排序
.orderByDesc(User::getCreateTime);
//使用这个查询条件执行了一个查询,并返回了符合条件的用户列表。
List<User> userList = userMapper.selectList(wrapper);
2.3 使用LambdaQueryWrapper实现MySQL COUNT逻辑
//创建一个LambdaQueryWrapper对象,并传入你想查询的实体类作为参数。
LambdaQueryWrapper<User> queryWrapper = new LambdaQueryWrapper<>();
//在这个对象上添加你想查询的条件。
//你可以使用各种方法来添加条件,比如eq()方法用于添加等于某个值的条件,gt()方法用于添加大于某个值的条件等等。
queryWrapper.eq(User::getUsername, "张三");
//调用lambdaQueryWrapper对象上的count()方法来获取满足条件的记录数
int count = userMapper.selectCount(queryWrapper);
通过调用LambdaQueryWrapper提供的orderByDesc方法来实现排序功能,并基于创建时间字段进行降序排列。
// 假设有一个User实体类,它有一个createTime属性表示创建时间
public class User {
private Date createTime;
// ...其他代码...
}
// 在服务类中,使用LambdaQueryWrapper来控制排序
public List<User> getUserList() {
LambdaQueryWrapper<User> wrapper = Wrappers.lambdaQuery(User.class);
// 按照创建时间倒序
// `User::getCreateTime`是一个方法引用
wrapper.orderByDesc(User::getCreateTime);
return userMapper.selectList(wrapper);
}
User::getCreateTime 等价于
new Comparator<User>() {
//这个比较器用于控制排序的顺序。
public int compare(User u1, User u2) {
return u1.getCreateTime().compareTo(u2.getCreateTime());
}
}
2.5 使用LambdaQueryWrapper和MySQL的limit语句来查询前10条记录的示例
如示例所示,在采用LambdaQueryWrapper与MySQL结合应用limit指令时, 可以实现对前10条记录的数据检索.
//使用LambdaQueryWrapper构建了一个查询条件
LambdaQueryWrapper<User> wrapper = new LambdaQueryWrapper<>();
//使用last方法指定了查询结果的数量为10
wrapper.last("LIMIT 10");
//使用这个查询条件执行了一个查询,并返回了符合条件的前10条用户记录
List<User> userList = userMapper.selectList(wrapper);
//使用LambdaQueryWrapper构建了一个查询条件
LambdaQueryWrapper<ScenariosConfig> lqw = new LambdaQueryWrapper<>();
//只查询状态为1的结果
lqw.eq(ScenariosConfig::getStatus, 1);
//对结果进行按照时间倒叙排序
lqw.orderByDesc(ScenariosConfig::getCreateTime);
//使用last方法指定了查询结果的数量为1
lqw.last(" limit 1");
ScenariosConfig scenariosConfig = baseMapper.selectOne(lqw);
三、QueryWrapper介绍
3.1 QueryWrapper的缺点
在功能运用方面具有相似性
3.2 使用QueryWrapper构建查询条件的示例
以下是一个使用QueryWrapper构建查询条件的示例:
//使用QueryWrapper构建了一个查询条件
QueryWrapper<User> wrapper = new QueryWrapper<>();
//查询名字为"John",年龄大于18的用户,并按照创建时间降序排序
wrapper.eq("name", "John")
.gt("age", 18)
.orderByDesc("create_time");
//使用这个查询条件执行了一个查询,并返回了符合条件的用户列表。
List<User> userList = userMapper.selectList(wrapper);
四、参考链接
项目实战
项目实战
项目实战
项目实战
项目实战
项目实战
全部评论 (0)
还没有任何评论哟~
