最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

淺談MyBatis循環(huán)Map(高級(jí)用法)

 更新時(shí)間:2020年09月22日 14:45:49   作者:胖先森  
這篇文章主要介紹了淺談MyBatis循環(huán)Map(高級(jí)用法),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

今天遇到一個(gè)比較特殊的業(yè)務(wù),需要對(duì)傳入的Map數(shù)據(jù)在映射文件中進(jìn)行遍歷,在之前的學(xué)習(xí)中,我們也知道MyBatis有默認(rèn)對(duì)集合的操作list和array,但是沒有默認(rèn)的map,所有不能直接寫collection="map",如果這么處理,它會(huì)當(dāng)成是根據(jù)map.get("map")獲取傳遞value只,==大部分情況下是一個(gè)map中是不會(huì)有“map”這個(gè)key的,于是就是報(bào)錯(cuò)==。如果你想用map標(biāo)識(shí)來獲取參數(shù)map,就需要保證傳入的Map參數(shù)有@Param("map")注解。

1.Mybatis入?yún)ap的使用

1.1 傳遞Map數(shù)據(jù)

第一種:自己封裝傳遞Map中的KEY值,模擬數(shù)據(jù)

//service:
public List<UserDepte> getByMap(Map<String,List<Long>> map){
    Map<String,Object> paramsMap= new HashMap<String, Object>();
    params.put("paramsMap", map);
    return this.getByMap(paramsMap);  
}
//dao:
int getByMap(Map<String,Object> map)

第二種:個(gè)人推薦@Param注解

//service直接調(diào)用dao
int getByMap(@param("paramsMap") Map<String,Object> map)

1.2 映射文件XML

(1)循環(huán)KEY值寫法:

<foreach collection="paramsMap.keys" item="k" separator="and">  
  ${k} = #{k}  
</foreach> 

(2)循環(huán)VAVLUE值寫法

<foreach collection="paramsMap.values" item="v" separator="and">  
  ${v} = #{v}  
</foreach> 

其實(shí)本質(zhì)就是使用的Map.Entiy對(duì)象中的屬性,自己回顧一下Java中對(duì)Map的遍歷方式有幾種

1.3 KEY獲取VALUE

<foreach collection="paramsMap.keys" item="k" separator="and">  
  <if test="null != paramsMap[k]">  
    ${k} = ${paramsMap[k]}  
  </if> 
</foreach> 

==注意:這里使用的$來獲取數(shù)據(jù),絕大部分情況下我們個(gè)人不推薦使用$符號(hào)==

個(gè)人推薦方式:一次循環(huán)得到key和value值,這里使用#和$都是可以的

<foreach collection="paramsMap" index="key" item="value">
  #{key} = #{value}
</foreach>

==回顧:#和$的區(qū)別,應(yīng)該還記得吧!==

1.4 表達(dá)式書寫錯(cuò)誤

通常我們?cè)O(shè)置值的時(shí)候,會(huì)以#{}的方式,而不是${},如下:==錯(cuò)誤寫法==

<foreach collection="paramsMap.keys" item="k" separator=",">  
  <if test="null != paramsMap[k]">  
    ${k} = #{paramsMap[k]}  
  </if> 
</foreach> 

這樣書寫,取不了值了,${condition[k]} 能取的出值,但#{condition[k]} 取出來的值卻實(shí)null,正確的寫法應(yīng)該是:

<foreach collection="paramsMap.keys" item="k" separator=",">  
  <if test="null != paramsMap[k]">  
    ${k} = #{paramsMap[${k}]} <!-- 請(qǐng)注意這種寫法,我個(gè)人還是喜歡一次性獲取key和value的寫法 -->
  </if> 
</foreach> 

2.Map高級(jí)用法

MyBatis嵌套循環(huán)map的高級(jí)用法:假如參數(shù)類型是這么一個(gè)類型結(jié)構(gòu): Map map = new HashMap<String,List<String>>,我想要拼裝出來的sql如下:

select * from 表名
where (
  (id = 1 and name in ('悟空','唐僧','八戒') or
  (id = 2 and name in ('劉備','張飛','關(guān)羽') or
  (id = 3 and name in ('小三','王五','王八') or
  ……
)

id對(duì)應(yīng)的是Map中KEY,而in中的數(shù)據(jù)是Map中的value

Map<String,List<String>> map = new HashMap<>();
List<String> nameList = new ArrayList<>();
nameList.add("悟空");
nameList.add("唐僧");
nameList.add("八戒");
map.put("1",nameList);

nameList = new ArrayList<>();
nameList.add("劉備");
nameList.add("張飛");
nameList.add("關(guān)羽");
map.put("2",nameList);

(1)第一種寫法:就是通過KEY獲取value的形式

SELECT * FROM 表名
WHERE 
<foreach collection="paramsMap.keys" item="key" open="(" separator="OR" close=")">
  (id = #{key} AND name in
  <foreach collection = "paramsMap[key]" item="name" separator="," open="(" close=")">
    #{name}
  </foreach>
  )
</foreach>

(1)第二種寫法:個(gè)人喜歡的方式

SELECT * FROM 表名
WHERE 
<foreach collection="paramsMap" index="key" item="value" open="(" separator="OR" close=")">
  (id = #{key} AND name in
  <foreach collection = "value" item="name" separator="," open="(" close=")">
    #{name}
  </foreach>
  )
</foreach>

 到此這篇關(guān)于淺談MyBatis循環(huán)Map(高級(jí)用法)的文章就介紹到這了,更多相關(guān)MyBatis循環(huán)Map內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Spring框架JdbcTemplate數(shù)據(jù)庫(kù)事務(wù)管理完全注解方式

    Spring框架JdbcTemplate數(shù)據(jù)庫(kù)事務(wù)管理完全注解方式

    這篇文章主要介紹了Spring框架JdbcTemplate數(shù)據(jù)庫(kù)事務(wù)管理及完全注解方式,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-05-05
  • mybatis連接數(shù)據(jù)庫(kù)實(shí)現(xiàn)雙表查詢

    mybatis連接數(shù)據(jù)庫(kù)實(shí)現(xiàn)雙表查詢

    本文主要介紹了mybatis連接數(shù)據(jù)庫(kù)實(shí)現(xiàn)雙表查詢,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-09-09
  • SpringBoot項(xiàng)目實(shí)用功能之實(shí)現(xiàn)自定義參數(shù)解析器

    SpringBoot項(xiàng)目實(shí)用功能之實(shí)現(xiàn)自定義參數(shù)解析器

    這篇文章主要介紹了SpringBoot項(xiàng)目實(shí)用功能之實(shí)現(xiàn)自定義參數(shù)解析器,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • maven如何查看jar的pom引入來源

    maven如何查看jar的pom引入來源

    這篇文章主要介紹了maven查看jar的pom引入來源,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-07-07
  • IDEA生成patch和使用patch的方法實(shí)現(xiàn)

    IDEA生成patch和使用patch的方法實(shí)現(xiàn)

    比如你本地修復(fù)的 bug,需要把增量文件發(fā)給客戶,很多場(chǎng)景下大家都需要手工整理修改的文件,并整理好目錄,這個(gè)很麻煩,那有沒有簡(jiǎn)單的技巧呢?本文主要介紹了IDEA生成patch和使用patch的方法實(shí)現(xiàn),感興趣的可以了解一下
    2023-08-08
  • 封裝了一個(gè)Java數(shù)據(jù)庫(kù)訪問管理類

    封裝了一個(gè)Java數(shù)據(jù)庫(kù)訪問管理類

    剛剛試著用JDBC,仿著原來C#的寫法寫了這段代碼,自己覺得還是挺粗糙的,還煩請(qǐng)路過的朋友推薦一個(gè)寫得較好較完整的相關(guān)例程以便學(xué)習(xí)。謝謝!
    2009-02-02
  • Java Map如何根據(jù)key取value以及不指定key取出所有的value

    Java Map如何根據(jù)key取value以及不指定key取出所有的value

    這篇文章主要介紹了Java Map如何根據(jù)key取value以及不指定key取出所有的value,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-09-09
  • Java springboot 整合 Nacos的實(shí)例代碼

    Java springboot 整合 Nacos的實(shí)例代碼

    這篇文章主要介紹了Java springboot 整合 Nacos的實(shí)例,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-04-04
  • SpringBoot中接收POST參數(shù)的幾種方式詳解

    SpringBoot中接收POST參數(shù)的幾種方式詳解

    這篇文章主要介紹了SpringBoot中接收POST參數(shù)的幾種方式,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-06-06
  • springboot+chatgpt+chatUI Pro開發(fā)智能聊天工具的實(shí)踐

    springboot+chatgpt+chatUI Pro開發(fā)智能聊天工具的實(shí)踐

    本文主要介紹了springboot+chatgpt+chatUI Pro開發(fā)智能聊天工具的實(shí)踐,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-04-04

最新評(píng)論

定兴县| 门头沟区| 乐昌市| 瓦房店市| 汝城县| 延边| 阜平县| 德庆县| 汕尾市| 贵定县| 绥德县| 夏津县| 延庆县| 偃师市| 肃宁县| 乐至县| 昌图县| 茂名市| 天水市| 阿尔山市| 徐州市| 石门县| 海门市| 永寿县| 孟州市| 元谋县| 平谷区| 当阳市| 渭源县| 涿鹿县| 清丰县| 彰武县| 潜山县| 苏尼特左旗| 萍乡市| 炎陵县| 新龙县| 南昌市| 桦甸市| 和田市| 申扎县|