91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

淺談MyBatis循環Map(高級用法)

發布時間:2020-10-06 09:28:31 來源:腳本之家 閱讀:148 作者:胖先森 欄目:開發技術

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

1.Mybatis入參Map的使用

1.1 傳遞Map數據

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

//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)

第二種:個人推薦@Param注解

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

1.2 映射文件XML

(1)循環KEY值寫法:

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

(2)循環VAVLUE值寫法

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

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

1.3 KEY獲取VALUE

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

==注意:這里使用的$來獲取數據,絕大部分情況下我們個人不推薦使用$符號==

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

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

==回顧:#和$的區別,應該還記得吧!==

1.4 表達式書寫錯誤

通常我們設置值的時候,會以#{}的方式,而不是${},如下:==錯誤寫法==

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

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

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

2.Map高級用法

MyBatis嵌套循環map的高級用法:假如參數類型是這么一個類型結構: Map map = new HashMap<String,List<String>>,我想要拼裝出來的sql如下:

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

id對應的是Map中KEY,而in中的數據是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("關羽");
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)第二種寫法:個人喜歡的方式

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>

 到此這篇關于淺談MyBatis循環Map(高級用法)的文章就介紹到這了,更多相關MyBatis循環Map內容請搜索億速云以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持億速云!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

河曲县| 金塔县| 西充县| 彭泽县| 两当县| 清河县| 台北市| 阿勒泰市| 印江| 梁平县| 蒲江县| 兴国县| 文水县| 炉霍县| 涡阳县| 武邑县| 务川| 卫辉市| 西乌珠穆沁旗| 松阳县| 依安县| 南安市| 永嘉县| 洮南市| 汤阴县| 金乡县| 莆田市| 鞍山市| 康乐县| 娄底市| 七台河市| 乌拉特后旗| 秀山| 红桥区| 尉犁县| 工布江达县| 叶城县| 南丰县| 合阳县| 于都县| 灵台县|