记一次在mybatis中使用String字符串作为sql语句 in关键字 后面参数的事故

简介: 记一次在mybatis中使用String字符串作为sql语句 in关键字 后面参数的事故

业务场景

需要查询出某一个表中 主键 id 在 13,14,15,16的之间的数据,前台传过来的是一个String类型的字符串 “13,14,15,16”。我上去就没多想直接将这个参数传到sql语句中了,

xml中的sql与语句写法如下:


SELECT * from user where  id in ( #{ids} )


结果可想而知一条数据也没有查出来。


解决方案:

使用mybatis的 <foreach> 标签, 并将ids由字符串转换为一个List<String> 类型的数组.

SELECT * from user where  id in
<foreach item="userId" collection="userIds"  open="(" separator="," close=")">
            #{userId}
        </foreach>


String[] split = userIds.split(",");
        List<String> strings = Arrays.asList(split);


分析原因:

一开始的那种做法相当于把整个userIds当成一个参数,或者说成把 “13,14,15,16” 当成一个id 所以就一个也查询不到了。

这种猜想也在控制台的sql语句中得到印证:


方案一的控制台的sql打印和传参(第一次错误的方式):
DEBUG o.a.e.i.p.e.J.selectJobsToExecute - ==>  Preparing: SELECT * from user where  id in(?)
 DEBUG o.a.e.i.p.e.J.selectJobsToExecute - ==> Parameters: 13,14,15,16(String)


方案二的控制台的sql打印和传参(解决方案):

DEBUG o.a.e.i.p.e.J.selectJobsToExecute - ==>  Preparing: SELECT * from user where  id in(?,?,?,?)
DEBUG o.a.e.i.p.e.J.selectJobsToExecute - ==> Parameters: 13(String),14(String),15(String),16(String)


目录
相关文章
|
5天前
|
SQL XML Java
mybatis 调用修改SQL时 出现了一个问题 没有修改成功也没有报错
mybatis 调用修改SQL时 出现了一个问题 没有修改成功也没有报错
13 0
|
1月前
|
存储 缓存 测试技术
CMake String函数:如何巧妙地在cmake中操作字符串
CMake String函数:如何巧妙地在cmake中操作字符串
101 0
|
存储 编译器 Linux
标准库中的string类(中)+仅仅反转字母+字符串中的第一个唯一字符+字符串相加——“C++”“Leetcode每日一题”
标准库中的string类(中)+仅仅反转字母+字符串中的第一个唯一字符+字符串相加——“C++”“Leetcode每日一题”
|
17天前
|
JavaScript
js 字符串String转对象Object
该代码示例展示了如何将一个以逗号分隔的字符串(`&#39;1.2,2,3,4,5&#39;`)转换为对象数组。通过使用`split(&#39;,&#39;)`分割字符串并`map(parseFloat)`处理每个元素,将字符串转换成浮点数数组,最终得到一个对象数组,其类型为`object`。
|
20天前
|
XML 编解码 数据格式
Python标准数据类型-String(字符串)
Python标准数据类型-String(字符串)
23 2
|
1月前
|
SQL 存储 Kubernetes
Seata常见问题之mybatisplus的批量插入方法报SQL错误如何解决
Seata 是一个开源的分布式事务解决方案,旨在提供高效且简单的事务协调机制,以解决微服务架构下跨服务调用(分布式场景)的一致性问题。以下是Seata常见问题的一个合集
28 0
|
1月前
|
SQL JavaScript
js开发:请解释什么是ES6的模板字符串(template string),并给出一个示例。
ES6的模板字符串以反引号包围,支持变量和表达式插入以及多行书写。例如,插入变量值`Hello, ${name}!`,计算表达式`${num1 + num2}`,以及创建多行字符串。模板字符串保留原始空格和缩进,简化了字符串拼接,提高了代码可读性。
18 6
|
1月前
|
SQL Java
使用java中的String类操作复杂的字符串
使用java中的String类操作复杂的字符串
9 0
|
1月前
|
SQL Java 关系型数据库
MyBatis的动态SQL之OGNL(Object-Graph Navigation Language)表达式以及各种标签的用法
MyBatis的动态SQL之OGNL(Object-Graph Navigation Language)表达式以及各种标签的用法
18 0
|
1月前
|
SQL Java 关系型数据库
MyBatis中的9种常用动态sql标签精妙用法
MyBatis中的9种常用动态sql标签精妙用法
71 0