Mybatis-plus foreach拼接字符串查询无数据返回

Mybatis-plus xml使用foreach遍历查询条件,填充IN函数时,查询不到数据

 入参 List<String>   [A,B,C,D,E,F]

 WHERE sku_code IN
 <foreach collection="listHistoryBrowseDateVO.list" item="skuCode" index="index" open="(" close=")"
          separator=",">
     #{skuCode}
 </foreach>

以上代码在迭代器中,给IN函数赋值的时候,使用的是#{ }占位符号,最后解析出的sql是:
WHERE sku_code IN (A,B,C,D,E,F)不符合IN函数填充查询格式。

两种解决方式:
1、将入参处理为: String ‘A’,‘B’,‘C’,‘D’,‘E’,‘F’,然后使用占位符 WHERE sku_code IN (#{}) 直接填充

2、入参处理为:List [ ‘A’,‘B’,‘C’,‘D’,‘E’,‘F’],使用迭代器+拼接符${}

 入参 List<String>   [  'A','B','C','D','E','F']

 WHERE sku_code IN
 <foreach collection="listHistoryBrowseDateVO.list" item="skuCode" index="index" open="(" close=")"
          separator=",">
     ${skuCode}
 </foreach>

Mybatis-plus #{} 占位符,${}拼接符,在sql解析的时是有区别的
参考 https://www.cnblogs.com/coder-wf/p/12198771.html

### MyBatis-Plus 查询操作使用教程 #### 1. 基本查询方法 MyBatis-Plus 提供了多种便捷的方法来执行查询操作,这些方法不仅简化了 SQL 的编写过程,还提高了开发效率。以下是几种常见的基本查询方式: ##### 使用 `selectById` 方法查询单条记录 通过主键 ID 进行精确匹配查询是最常用的方式之一。 ```java User user = userService.getById(1L); System.out.println(user.toString()); ``` 此代码片段展示了如何根据用户ID获取特定用户的详细信息[^1]。 ##### 使用 `selectBatchIds` 批量查询多条记录 当需要一次性查询多个对象时,可以通过传递一组主键来进行批量加载数据。 ```java List<User> userList = userService.listByIds(Arrays.asList(1L, 2L, 3L)); for (User u : userList) { System.out.println(u.toString()); } ``` 这段代码实现了基于给定的一组ID列表返回对应的用户集合。 #### 2. 条件构造器 QueryWrapper 为了实现更加灵活复杂的条件查询MyBatis-Plus 推出了 `QueryWrapper` 工具类,它允许开发者构建动态SQL语句而不必手动拼接字符串。 ##### 构建简单的等于条件查询 下面的例子说明了怎样利用 `eq()` 函数创建相等判断逻辑并应用到字段上。 ```java LambdaQueryWrapper<User> wrapper = new LambdaQueryWrapper<>(); wrapper.eq(User::getName, "张三"); List<User> usersByName = userService.list(wrapper); usersByName.forEach(System.out::println); ``` 这里定义了一个名为 `wrapper` 的查询构造器实例,并设置了姓名为 “张三” 的筛选条件[^3]。 ##### 组合多个条件进行高级查询 除了单一条件外,还可以组合不同类型的谓词形成复杂查询表达式。 ```java LambdaQueryWrapper<User> complexWrapper = new LambdaQueryWrapper<>(); complexWrapper.like(User::getUsername, "李").gt(User::getAge, 18).orderByDesc(User::getId); Page<User> pageResult = userService.page(new Page<>(1, 5), complexWrapper); pageResult.getRecords().forEach(System.out::println); ``` 上述例子中包含了模糊匹配 (`like`) 和大于比较 (`gt`) ,同时也指定了排序规则(`orderByDesc`) 及分页参数。 #### 3. 自动填充功能简介 值得一提的是,MyBatis-Plus 支持自动处理某些特殊场景下的默认值设置或更新时间戳维护等功能,这有助于减少业务层代码中的重复劳动。 例如,在实体类中标记某个属性作为创建时间和修改时间,则每次保存新纪录或者更新现有记录的时候都会自动生成相应的时间戳。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值