mybatis in查詢傳入String方式
mybatis in查詢傳入String
在使用 mybaits 進行 in 查詢時,傳入String,如1,2,3,發現查詢的結果並非我們想要的
這是因為#{}編譯完自動加雙引號“” 也就是變成in (“1,2,3”)
如果想要獲得我們想要的結果,可以使用${},編譯完是這樣的 in (1,2,3)
例如,查詢鈴音庫中多首鈴音的總數量
<select id="getProgsResourceCount" resultType="java.lang.Long" parameterType="com.progandresource.entity.ProgsResourceCond"> select count(ring_no) from progandresmanage_ringinfo where valid_day > now() <if test="ringNo != '' and ringNo != null"> and ring_no in (${ringNo}) </if> </select>
如果傳入參數是List或者Array,則直接用foreach即可
例如
<select id="getProgsResourceCount" resultType="java.lang.Long" parameterType="java.util.List"> select count(ring_no) from progandresmanage_ringinfo where valid_day > now() and ring_no in <foreach collection="list" item="item" index="index" open="(" close=")" separator=","> #{item, jdbcType=VARCHAR} </foreach> </select>
mybatis in查詢傳入字符串參數
sql裡的in操作符允許我們在where子句中規定多個值進行匹配。
語法:
SELECT column_name(s) FROM table_name WHERE column_name IN (value1,value2,...);
在mybatis裡,可以通過傳入數組或容器(array、list、set、map)通過foreach標簽來給in操作符指定參數。
問題:想要從org表中匹配字段org_id在OR001、OR002、OR004中的數據,org_id是字符串類型的字段。
常規方法是在mapper.java中傳入一個包含”OR001″、“OR002”、”OR004″的list對象orgIdList,在xml中:
SELECT * from org where org_id in <foreach item="orgId" index="index" collection="orgIdList" open="(" close=")" separator=","> #{orgId} </foreach>
如果要作為in的匹配參數的多個值在一個String類型的對象orgs中,想直接通過String傳入,有兩種實現方式。
1、在xml中用${orgs}把整個String作為sql的一部分
SELECT * from org where org_id in (${orgs})
這種寫法需要關註字符串orgs的內容在拼入之後,整個sql是否是符合語法的,按上面的需求和sql寫法,就要求作為sql一部分的orgs的值為”‘OR001′,‘OR002′,‘OR004′”。
參數直接以sql一部分的方式作為查詢語句存在sql註入的風險,有一些項目可能會一刀切地限制開發者不允許用這種寫法。
2、在xml的foreach標簽裡,傳入collection屬性時將字符串用split函數轉為數組
SELECT * from org where org_id in <foreach item="orgId" index="index" collection="orgs.split(',')" open="(" close=")" separator=","> #{orgId} </foreach>
在這裡傳入的orgs字符串的值可以為”OR001,OR002,OR004″,在調用split函數時設置”,”分格,可以直接切分出三個字符串作為數組的元素。
以上為個人經驗,希望能給大傢一個參考,也希望大傢多多支持WalkonNet。
推薦閱讀:
- mybatis update更新字段的使用操作
- MyBatis傳入參數為List對象的實現
- Mybatis 如何傳入字符串參數,分割並遍歷
- mybatis條件語句中帶數組參數的處理
- mybatis批量新增、刪除、查詢和修改方式