国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Java > 正文

Mybatis中注解@MapKey的使用詳解

2019-11-26 13:39:36
字體:
來源:轉載
供稿:網(wǎng)友

mybatis的原身是ibatis,現(xiàn)在已經(jīng)脫離了apache基金會,新官網(wǎng)是http://www.mybatis.org/

在研究Mybatis源碼之前并不知道這個注解的妙用的,但是當我看到參數(shù)解析的時候 有這個一個注解,所以我了解了一下,當我們返回像Map<String, Map<String, Object>>這種類型的時候,我們往往很難做到,因為這里面可能是多個表的數(shù)據(jù),所以我們不可能再建一個模型。

這時候我們就可以使用這個注解了

@Retention(RetentionPolicy.RUNTIME)@Target(ElementType.METHOD)public @interface MapKey {String value();}

很明顯,這個注解是作用在方法上面的,具體的用法就是設置外面Map的KEY是什么。這樣我們就能夠查詢出非常復雜的結果,而不用在建立一個新的實體.

PS:下面看下MyBatis使用@MapKey注解接收多個查詢記錄到Map中,以便方便地用get()方法獲取字段的值

需求場景:

批量從數(shù)據(jù)庫查出若干條數(shù)據(jù),包括id和name兩個字段。希望可以把結果直接用Map接收,然后通過map.get(id)方便地獲取name的值。

問題:

如果使用下面的代碼,則如果查詢結果是多條就會報錯,因為MyBatis是把結果以("id":123)、("name":"Jack")的形式保存在Map中的。所以如果返回結果一條包括了id和name的記錄就沒問題;如果返回多條記錄,即有多個("id":123)、("id":124),則MyBatis就傻掉不知如何處理了。

Map<String, Object> m = abcDao.getNamesByIds(idList); 

解決的方法是在外面再用一個Map:

Map<Integer, Map<String, Object>> m = abcDao.getNamesByIds(idList); 

然后,在這個dao的方法上面加一個注解:

<span style="white-space:pre"> </span>/** <span style="white-space:pre"> </span> * 根據(jù)多個id批量獲取名稱 <span style="white-space:pre"> </span> * @param list 包含有Map key="id"的list <span style="white-space:pre"> </span> * @return <span style="white-space:pre"> </span> */ <span style="white-space:pre"> </span>@MapKey("id") <span style="white-space:pre"> </span>public Map<Integer, Map<String, Object>> getNamesByIds(List<Map<String, Object>> list); 

這個注解表示最外層Map的key為查詢結果中字段名為“id”的值。

Mapper.xml中的配置如下:

<select id="getNamesByIds" resultType="java.util.Map">  SELECT id, name FROM tb_abc WHERE id IN  <foreach item="item" collection="list" open="(" separator="," close=")">    #{item.id}  </foreach> </select> 

以上所述是小編給大家介紹的Mybatis中注解@MapKey的使用詳解,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對武林網(wǎng)網(wǎng)站的支持!

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 南昌市| 安吉县| 泰宁县| 屏南县| 永丰县| 定日县| 江都市| 铁力市| 玉溪市| 洛浦县| 平邑县| 明星| 徐闻县| 台中市| 洛隆县| 昌图县| 曲松县| 吉林省| 松原市| 广灵县| 中西区| 衡水市| 澎湖县| 台东县| 宣威市| 青田县| 辛集市| 韶关市| 安乡县| 马公市| 靖州| 新昌县| 宜春市| 南昌市| 盐城市| 河北省| 安丘市| 攀枝花市| 仙桃市| 兰坪| 桂林市|