Mybatis plus 之 QueryWrapper、LambdaQueryWrapper、LambdaQueryChainWrapper

1、QueryWrapper

QueryWrapper 使用的是数据库的字段名

     /**
     * (年龄小于40或邮箱不为空)且姓王
     * SELECT * FROM `user`
     * WHERE (`age`< 40 OR `email` IS NOT NULL) AND `name` LIKE '王%'
     */
    @Test
    public void selectList_nested() {
        QueryWrapper<User> query = new QueryWrapper<>();
        query.nested(q -> q.lt("age", 40).or().isNotNull("email"))
            .likeRight("name", "王");
        List<User> list = userMapper.selectList(query);
        list.forEach(System.out::println);
    }

    @Test
    public void selectList_entity() {
        User whereUser = new User();
        whereUser.setName("刘");
        whereUser.setAge(32);
        whereUser.setEmail("");
        QueryWrapper<User> query = new QueryWrapper<>(whereUser);

        List<User> list = userMapper.selectList(query);
        list.forEach(System.out::println);
    }

2、LambdaQueryWrapper

LambdaQueryWrapper使用的是Lambda语法

    @Test
    public void mySelect() {
        LambdaQueryWrapper<User> query = new LambdaQueryWrapper<>();
        query.likeRight(User::getName, "王")
            .and(q -> q.lt(User::getAge, 40).or().isNotNull(User::getEmail));
        List<User> list = userMapper.selectAll(query);
        list.forEach(System.out::println);
    }

3、LambdaQueryChainWrapper

链式查询

    /**
     * 链式lambda条件构造器:更优雅的书写方式
     */
    @Test
    public void lambdaQueryChainWrapper() {
        List<User> list = new LambdaQueryChainWrapper<User>(userMapper)
            .likeRight(User::getName, "王")
            .and(
                q -> q
                    .lt(User::getAge, 40)
                    .or()
                    .isNotNull(User::getEmail)
            )
            .list();
        list.forEach(System.out::println);
    }

4、三者区别

1、QueryWrapper 直接使用写死“列名”方式,容易因拼写错误导致异常,当字段名称发生改变,导致额外更多检查和修改工作。如有错误,运行时报错。或者需要封装查询类的对象,增加代码量。

2、LambdaQueryWrapper 使用lambda表达式,如有错误,编译期就会报错;灵活。【推荐】

3、LambdaQueryChainWrapper,写法偏向于炫技,可读性没有上面的代码强。

LambdaQueryWrapperLambdaQueryChainWrapperMyBatis-Plus 框架中的两个查询条件构造器类。它们的作用是简化 SQL 查询条件的编写,提供了一种更加简洁和类型安全的方式来构建查询条件。 LambdaQueryWrapper 类主要用于单表查询,可以通过 lambda 表达式来构建查询条件。使用 LambdaQueryWrapper 类,可以避免手动编写 SQL 语句,提高开发效率。例如,可以通过以下方式使用 LambdaQueryWrapper 来构建查询条件: ```java LambdaQueryWrapper<User> queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.eq(User::getName, "John") .ge(User::getAge, 18) .orderByAsc(User::getCreateTime); List<User> userList = userMapper.selectList(queryWrapper); ``` LambdaQueryChainWrapper 类继承自 LambdaQueryWrapper 类,除了具备 LambdaQueryWrapper 的功能外,还可以链式调用多个查询条件。LambdaQueryChainWrapper 类的使用方式与 LambdaQueryWrapper 类类似,只是可以在链式调用中添加更多的查询条件。例如: ```java LambdaQueryChainWrapper<User> queryChainWrapper = new LambdaQueryChainWrapper<>(userMapper); List<User> userList = queryChainWrapper.eq(User::getName, "John") .ge(User::getAge, 18) .orderByAsc(User::getCreateTime) .list(); ``` 总的来说,LambdaQueryWrapperLambdaQueryChainWrapper 都是为了简化查询条件的编写而存在的,前者适用于单表查询,后者适用于链式调用多个查询条件。它们可以帮助开发者更方便地构建数据库查询语句。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

春风化作秋雨

你的鼓励将是我创作的最大动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值