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。

推薦閱讀: