Mybatis 如何传入字符串参数,分割并遍历
如何传入字符串参数,分割并遍历
如前台传入字符串参数
String str = "a,b,c,d,e,f";
现需将此参数作为查询语句的参数,
Select * from news where id in (${id})
使用该语句查询正常返回结果,但势必产生sql注入漏洞。
如修改为:
Select * from news where id in (#{id})
程序报错。
正确写为如下
id in <foreach collection="str.split(',')" item="item" index="index" open="(" separator="," close=")">#{item}</foreach>
Mybatis 传入分割字符串做参数
需求:更改指定一些客户的一个字段
设计:传参两个(一个需要更改字段,一个客户id字符串用","隔开)
问题:mybatis中sql语句里条件报错,原因是用了#{clientIds}传入sql中是字符串形式
where id in (#{clientIds}) 等于 where id in ("1,2,3,4") 报错
解决
方法1、客户id字符串在代码里分割成list,mybatis中list遍历
<foreach collection="clientIdList" item="item" index="index" open="(" separator="," close=")"> #{item} </foreach>
方法2、将字符串在mybatis里分割
<foreach collection="clientIds.split(',')" item="item" index="index" open="(" separator="," close=")"> #{item} </foreach>
方法3、sql注入,改为where id in (${clientIds})
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
相关文章
Spring Boot 数据校验@Valid+统一异常处理的实现
这篇文章主要介绍了Spring Boot 数据校验@Valid+统一异常处理的实现,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧2019-04-04深入分析Comparable与Comparator及Clonable三个Java接口
接口不是类,而是对类的一组需求描述,这些类要遵从接口描述的统一格式进行定义,这篇文章主要为大家详细介绍了Java的Comparable,Comparator和Cloneable的接口,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助2022-05-05
最新评论