mybatis in查詢傳入String方式
mybatis in查詢傳入String
在使用 mybaits 進行 in 查詢時,傳入String,如1,2,3,發(fā)現(xiàn)查詢的結(jié)果并非我們想要的
這是因為#{}編譯完自動加雙引號“” 也就是變成in (“1,2,3”)
如果想要獲得我們想要的結(jié)果,可以使用${},編譯完是這樣的 in (1,2,3)
例如,查詢鈴音庫中多首鈴音的總數(shù)量
<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>
如果傳入?yún)?shù)是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查詢傳入字符串參數(shù)
sql里的in操作符允許我們在where子句中規(guī)定多個值進行匹配。
語法:
SELECT column_name(s) FROM table_name WHERE column_name IN (value1,value2,...);
在mybatis里,可以通過傳入數(shù)組或容器(array、list、set、map)通過foreach標簽來給in操作符指定參數(shù)。
問題:想要從org表中匹配字段org_id在OR001、OR002、OR004中的數(shù)據(jù),org_id是字符串類型的字段。
常規(guī)方法是在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的匹配參數(shù)的多個值在一個String類型的對象orgs中,想直接通過String傳入,有兩種實現(xiàn)方式。
1、在xml中用${orgs}把整個String作為sql的一部分
SELECT * from org where org_id in (${orgs})
這種寫法需要關(guān)注字符串orgs的內(nèi)容在拼入之后,整個sql是否是符合語法的,按上面的需求和sql寫法,就要求作為sql一部分的orgs的值為"‘OR001',‘OR002',‘OR004'"。
參數(shù)直接以sql一部分的方式作為查詢語句存在sql注入的風險,有一些項目可能會一刀切地限制開發(fā)者不允許用這種寫法。
2、在xml的foreach標簽里,傳入collection屬性時將字符串用split函數(shù)轉(zhuǎn)為數(shù)組
SELECT * from org where org_id in
<foreach item="orgId" index="index" collection="orgs.split(',')" open="(" close=")" separator=",">
#{orgId}
</foreach>
在這里傳入的orgs字符串的值可以為"OR001,OR002,OR004",在調(diào)用split函數(shù)時設(shè)置","分格,可以直接切分出三個字符串作為數(shù)組的元素。
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
SpringCloud?hystrix斷路器與全局解耦全面介紹
什么是服務(wù)降級?當服務(wù)器壓力劇增的情況下,根據(jù)實際業(yè)務(wù)情況及流量,對一些服務(wù)和頁面有策略的不處理或換種簡單的方式處理,從而釋放服務(wù)器資源以保證核心交易正常運作或高效運作2022-10-10
詳解Java中三種狀態(tài)機實現(xiàn)方式來優(yōu)雅消滅 if-else 嵌套
這篇文章主要為大家詳細介紹了Java中三種狀態(tài)機實現(xiàn)方式從而優(yōu)雅消滅 if-else 嵌套,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學習一下2025-08-08
java中List數(shù)組用逗號分隔開轉(zhuǎn)成字符串2種方法
在我們?nèi)粘i_發(fā)中,在前后端交互的時候會遇到多個id或其他字段存放到一個字段中,這時我們會遇到一個List(集合)---->String(單個字段),這篇文章主要給大家介紹了關(guān)于java中List數(shù)組用逗號分隔開轉(zhuǎn)成字符串的2種方法,需要的朋友可以參考下2023-10-10
如何對spring框架的搭建進行封裝--springboot
這篇文章主要介紹了如何對spring框架的搭建進行封裝--springboot,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2025-03-03
在RedisTemplate中使用scan代替keys指令操作
這篇文章主要介紹了在RedisTemplate中使用scan代替keys指令操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-11-11

