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})
以上為個人經驗,希望能給大傢一個參考,也希望大傢多多支持WalkonNet。
推薦閱讀:
- MyBatis傳入參數為List對象的實現
- mybatis in查詢傳入String方式
- mybatis update更新字段的使用操作
- Mybatis動態SQL foreach批量操作方法
- MyBatis中foreach標簽的collection屬性的取值方式