MyBatis-plus wrapper.and用法 | apply

本文介绍了如何利用MyBatis-plus的`and`方法动态添加查询条件。在示例中,展示了根据用户输入参数构建复杂SQL条件,如`FIND_IN_SET`和`OR`操作,以灵活地过滤查询结果。这些方法使得在Java代码中构建动态SQL变得更加便捷。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

MyBatis-plus 通过 wrapper.and方法给sql添加额外的查询条件

MyBatis-plus方法:
    public Children and(boolean condition, Consumer<Children> consumer) {
        return this.and(condition).addNestedCondition(condition, consumer);
    }

一、需求:如果用户穿插了查询参数,就给sql附加条件(当然,这个条件可以是复杂的条件),否则查询不用带上条件。

示例:

    @org.junit.Test
    public void test() {
        String name = "狗哥";
        QueryWrapper<Animal> wrapper = new QueryWrapper<>();
        wrapper.and(StringUtils.isNotBlank(name),item->item.apply(
                "FIND_IN_SET({0},name)",name));
        List<Animal> animalList = animalMapper.selectList(wrapper);
        log.info("总记录:{}",animalList.size());
        animalList.forEach(System.out::println);
    }

一、需求:如果用户穿插了查询参数,就给sql附加条件(当然,这个条件可以是复杂的条件),否则查询其他的条件。

    default Children and(Consumer<Param> consumer) {
        return this.and(true, consumer);
    }
    @org.junit.Test
    public void test() {
        String name = "";
        QueryWrapper<Animal> wrapper = new QueryWrapper<>();
        wrapper.and(item->item.apply(
                "FIND_IN_SET({0},name)",name).or().eq("name","猫哥"));
        List<Animal> animalList = animalMapper.selectList(wrapper);
        log.info("总记录:{}",animalList.size());
        animalList.forEach(System.out::println);
    }
 wrapper.apply("(receipt_no Like '%"+incomeCollectionReceipt.getSearchValue()+"%' or customer Like '%"+incomeCollectionReceipt.getSearchValue()+"%' or matter Like '%"+incomeCollectionReceipt.getSearchValue()+"%' or bill_unit Like '%"+incomeCollectionReceipt.getSearchValue()+"%' or receipt_money Like '%"+incomeCollectionReceipt.getSearchValue()+"%' or item_name Like '%"+incomeCollectionReceipt.getSearchValue()+"%')");

MyBatis-Plus 是一个 MyBatis 的增强工具,它提供了很多便捷的功能来简化数据库操作。其中,QueryWrapperMyBatis-Plus 提供的一个查询构造器,用于构建复杂的查询条件。 apply 方法是 QueryWrapper 的一个方法,用于将一个函数应用到 QueryWrapper 上。它接受一个 Consumer 函数式接口作为参数,通过 lambda 表达式可以对 QueryWrapper 进行进一步的定制。 下面是 apply 方法的使用示例: ```java QueryWrapper<User> queryWrapper = new QueryWrapper<>(); queryWrapper.lambda().eq(User::getStatus, 1) .apply("date_format(create_time,'%Y-%m-%d') = {0}", "2021-01-01"); List<User> userList = userMapper.selectList(queryWrapper); ``` 在这个例子中,我们首先创建了一个 QueryWrapper 对象,并使用 lambda 表达式设置了一个等值条件 `eq(User::getStatus, 1)`,表示查询状态为 1 的用户。 然后,通过 apply 方法应用了一个自定义的 SQL 片段 `"date_format(create_time,'%Y-%m-%d') = {0}"`,其中 `{0}` 表示占位符,用于接收后面传入的参数。这个 SQL 片段的作用是筛选出 create_time 字段为指定日期的数据。 最后,我们使用 QueryWrapper 对象进行查询,将查询结果赋给 userList 变量。 通过使用 apply 方法,我们可以在 QueryWrapper 中通过自定义 SQL 片段实现更复杂的查询条件。注意,在使用 apply 方法时,需要对 SQL 片段进行安全处理,以避免 SQL 注入的风险。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值