Mybatis用注解寫(xiě)in查詢(xún)的實(shí)現(xiàn)
Mybatis注解寫(xiě)in查詢(xún)
@Select("<script>"
+ "SELECT * FROM table WHERE OrderNo IN "
+ "<foreach item='item' index='index' collection='list' open='(' separator=',' close=')'>"
+ "#{item}"
+ "</foreach>"
+ "</script>")
List<Map<String,Object>> selectdemo(@Param("list") List<String> list);
這里foreach里面的collection值寫(xiě)@Param值。
Mybatis中IN語(yǔ)句查詢(xún)、Mybatis中的foreach用法
1 需求
查詢(xún) 用戶(hù) ID 為 101、102、103 的數(shù)據(jù),參數(shù)是一個(gè)集合
2 在 SQL 語(yǔ)句中
select * from t_user where user_id in ( '101' , '102' ,'103')
3 在 Mybatis 中
你只需要
<select id="selectUserByIdList" resultMap="usesInfo">
SELECT
*
from t_user
WHERE id IN
<foreach collection="idList" item="id" index="index" open="(" close=")" separator=",">
#{id}
</foreach>
</select>
對(duì)應(yīng)的 Mapper中的接口如下
List<UserInfo> selectUserByIdList(@Param("idList")List idList)
4 聊一下
foreach元素的屬性主要有collection,item,index,open,separator,close。
4.1 collection
用來(lái)標(biāo)記將要做foreach的對(duì)象,作為入?yún)r(shí)
List對(duì)象默認(rèn)用"list"代替作為鍵
數(shù)組對(duì)象有"array"代替作為鍵,
Map對(duì)象沒(méi)有默認(rèn)的鍵。
入?yún)r(shí)可以使用@Param(“keyName”)來(lái)設(shè)置鍵,設(shè)置keyName后,默認(rèn)的list、array將會(huì)失效。
如下的查詢(xún)也可以寫(xiě)成如下
List<UserInfo> selectUserByIdList(List idList)
<select id="selectUserByIdList" resultMap="usesInfo">
SELECT
*
from t_user
WHERE id IN
<foreach collection="list" item="id" index="index" open="(" close=")" separator=",">
#{id}
</foreach>
</select>
如果是數(shù)組類(lèi)型
List<UserInfo> selectUserByIdList(Long[] idList)
<select id="selectUserByIdList" resultMap="usesInfo">
SELECT
*
from t_user
WHERE id IN
<foreach collection="array" item="id" index="index" open="(" close=")" separator=",">
#{id}
</foreach>
</select>
4.2
item:集合中元素迭代時(shí)的別名,該參數(shù)為必選。
index:在list和數(shù)組中,index是元素的序號(hào),在map中,index是元素的key,該參數(shù)可選
open:foreach代碼的開(kāi)始符號(hào),一般是(和close=")"合用。常用在in(),values()時(shí)。該參數(shù)可選
separator:元素之間的分隔符,例如在in()的時(shí)候,separator=","會(huì)自動(dòng)在元素中間用“,“隔開(kāi),避免手動(dòng)輸入逗號(hào)導(dǎo)致sql錯(cuò)誤,如in(1,2,)這樣。該參數(shù)可選。
close:foreach代碼的關(guān)閉符號(hào),一般是)和open="("合用。常用在in(),values()時(shí)。該參數(shù)可選。
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
kettle中使用js調(diào)用java類(lèi)的方法
這篇文章主要介紹了kettle中使用js調(diào)用java類(lèi)的方法,本文講解了注意事項(xiàng)和調(diào)用語(yǔ)法,需要的朋友可以參考下2015-05-05
解決idea默認(rèn)帶的equals和hashcode引起的bug
這篇文章主要介紹了解決idea默認(rèn)帶的equals和hashcode引起的bug,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-07-07
Java數(shù)組使用binarySearch()方法查找指定元素的實(shí)現(xiàn)
這篇文章主要介紹了Java數(shù)組使用binarySearch()方法查找指定元素的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-01-01
關(guān)于Java中使用jdbc連接數(shù)據(jù)庫(kù)中文出現(xiàn)亂碼的問(wèn)題
這篇文章主要介紹了關(guān)于Java中使用jdbc連接數(shù)據(jù)庫(kù)中文出現(xiàn)亂碼的問(wèn)題,默認(rèn)的編碼和數(shù)據(jù)庫(kù)表中的數(shù)據(jù)使用的編碼是不一致的,如果是中文,那么在數(shù)據(jù)庫(kù)中執(zhí)行時(shí)已經(jīng)是亂碼了,需要的朋友可以參考下2023-04-04
Mybatis集成Spring的實(shí)例代碼_動(dòng)力節(jié)點(diǎn)Java 學(xué)院整理
這篇文章主要介紹了Mybatis集成Spring的實(shí)例代碼,需要的朋友可以參考下2017-09-09
java實(shí)現(xiàn)List中對(duì)象排序的方法
這篇文章主要介紹了java實(shí)現(xiàn)List中對(duì)象排序的方法,涉及Java中的遍歷與對(duì)象操作技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-11-11
SpringBoot應(yīng)用啟動(dòng)過(guò)程分析
這篇文章主要介紹了SpringBoot應(yīng)用啟動(dòng)過(guò)程分析,需要的朋友可以參考下2017-08-08

