在MyBatis-Plus中,实现多个like查询条件之间为or关系

在MyBatis-Plus中,想要实现多个like查询条件之间为or关系,不能直接使用LambdaQueryWrapper的链式调用方法,因为它们之间默认为and关系。因此需要通过自定义SQL片段或者使用apply方法来实现or的逻辑。
如下图:

        LambdaQueryWrapper<CabinetModelManagementDO> lambdaQueryWrapper = new LambdaQueryWrapper<>();
        // keyword不为空,模糊查询品牌名称、模型名称、产品型号
        String keyword = dto.getKeyword();

        if (StringUtil.notEmpty(keyword)) {
            // 使用StringBuilder来构建or条件的SQL片段
            StringBuilder sb = new StringBuilder();

            // 第一个条件不需要前缀or
            sb.append("brand_name LIKE CONCAT('%', {0}, '%')");

            // 如果需要添加更多条件,则使用or连接
            if (Objects.equals(CabinetTypeEnum.SPRING_MACHINE.name(), dto.getCabinetType())) {
                sb.append(" OR model_name LIKE CONCAT('%', {0}, '%')");
            }
            if (Objects.equals(CabinetTypeEnum.OPEN_DOOR_CABINET.name(), dto.getCabinetType())) {
                sb.append(" OR product_model LIKE CONCAT('%', {0}, '%')");
            }

            // 使用apply方法将SQL片段添加到查询中
            // 注意:{0}是一个占位符,它会被lambdaQueryWrapper的参数值替换
            lambdaQueryWrapper.apply(sb.toString(), keyword);
        }

上面的代码中的{0}是一个占位符,它将在apply方法调用时被替换为keyword的值。CONCAT函数用于在关键字前后添加通配符%,以实现模糊查询。

PS:如此拼接方式,是否会存在sql注入攻击的隐患?

  • 13
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
### 回答1: 在 MyBatis-Plus ,你可以使用 Lambda 表达式来构建复杂的 SQL 查询条件。如果你想在 SQL 查询条件加括号,可以使用 Lambda 表达式的 `and` 和 `or` 方法来实现。 例如,假设你有一个用户表,希望查询年龄大于 18 岁或者名字以 "J" 开头的用户。你可以这样写: ``` List<User> users = userMapper.selectList(new QueryWrapper<User>() .lambda() .and(age -> age.ge(18)) .or(name -> name.likeRight("J%")) ); ``` 这样生成的 SQL 语句就会带上括号,类似这样: ``` SELECT * FROM user WHERE (age >= 18) OR (name LIKE 'J%') ``` 如果你想在条件嵌套更多的括号,可以使用 Lambda 表达式的 `and` 和 `or` 方法的重载版本,接受一个 `Function<QueryWrapper<T>, QueryWrapper<T>>` 类型的参数,这样就可以在括号内再嵌套一个 Lambda 表达式了。 例如,假设你想查询年龄大于 18 岁并且名字以 "J" 开头或者邮箱以 "example.com" 结尾的用户,你可以这样写: ``` List<User> users = userMapper.selectList(new QueryWrapper<User>() .lambda() .and(age -> age.ge(18)) .and(name -> name.likeRight("J%")) .or(query -> query.lambda() .and(email -> email.like("%example.com")) ) ); ``` 这样生成的 SQL 语句就会带上括号,类似这样: ``` SELECT * FROM user WHERE (age >= 18) AND (name LIKE ' ### 回答2: 使用Mybatis-PlusSQL查询条件加括号的方法是使用Wrapper构建查询条件,并使用lambda表达式和括号来组合条件。 首先,创建一个Wrapper对象,可以使用`QueryWrapper`或`LambdaQueryWrapper`来构建。以`LambdaQueryWrapper`为例: ```java LambdaQueryWrapper<User> wrapper = new LambdaQueryWrapper<>(); ``` 然后,在Wrapper对象使用lambda表达式来定义查询条件,并使用括号来分组条件。例如,查询年龄小于30或者姓名为"张三"的用户: ```java wrapper.and(w -> w.lt(User::getAge, 30).or().eq(User::getName, "张三")); ``` 在这个例子,括号内的条件`.lt(User::getAge, 30)`表示查询年龄小于30,`.or()`表示或运算,`.eq(User::getName, "张三")`表示查询姓名为"张三"。整个表达式的意思是查询满足括号内条件的用户。 最后,将Wrapper对象作为参数传递给Mybatis-Plus查询方法,如`selectList()`、`selectOne()`等。 这样就可以在Mybatis-Plus使用括号来组合查询条件了。 ### 回答3: 在MyBatis-Plus,在SQL查询条件加括号可以通过使用实体类的QueryWrapper对象来实现。QueryWrapper是MyBatis-Plus提供的一个查询封装类,可以方便地构建查询条件。 首先,需要创建一个QueryWrapper对象。可以使用QueryWrapper的构造函数创建一个空的QueryWrapper对象,然后使用它的方法来添加查询条件。 然后,可以使用QueryWrapper对象提供的方法来添加查询条件。例如,可以使用eq方法添加等于条件,使用like方法添加模糊查询条件。 如果需要在SQL查询条件加括号,可以使用and方法或者or方法来将多个条件加括号。例如,可以使用and方法将多个相等条件加括号。 最后,调用MyBatis-Plus提供的mapper的select方法,将QueryWrapper对象作为参数传入,就可以执行查询操作。查询结果将会被封装成一个List集合返回。 综上所述,MyBatis-PlusSQL查询条件加括号可以通过使用QueryWrapper对象来实现。通过构建QueryWrapper对象并使用它的方法来添加查询条件,然后将QueryWrapper对象作为参数传入select方法进行查询操作。这样就可以在SQL查询条件加括号实现更复杂的查询条件组合。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值