Advertisement

【项目实战】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)

还没有任何评论哟~