mybatis返回map結(jié)果集@MapKey使用的場(chǎng)景分析
mybatis返回map結(jié)果集@MapKey使用場(chǎng)景
select的 resultType屬性為map時(shí):
通過MapKey指定map的key值
使用id作為map的ke
@MapKey("id") Map<Long, UserInfo> getUserInfoMap();
Map的value為Map,一條記錄對(duì)應(yīng)一個(gè)Map
@MapKey("id") Map<Long, Map<String,Object>> getUserValueMap();
使用name作為map的key
@MapKey("name") Map<name, UserInfo> getUserInfoMap(); ? ..............返回一條記錄............... Map<String, Object> getUserInfoMapById();
mybatis使用@MapKey注解
背景和含義
背景:今天使用MyBatis查詢一些記錄,數(shù)據(jù)涉及到兩個(gè)表里的數(shù)據(jù),需要連表查詢,但我MyBatis的返回結(jié)果不想創(chuàng)建新的DO對(duì)象,因此使用@MapKey注解返回一個(gè)Map集合。
含義:@MapKey注解用于mapper.xml文件中,一般用于查詢多條記錄中各個(gè)字段的結(jié)果,存儲(chǔ)在Map中。Map結(jié)構(gòu)的示例如下:Map<Long, Map<String, String>>。范型類型可以修改。
- Map的key:一般存儲(chǔ)每條記錄的主鍵,也可以用其他值表示,主要取決于Dao層@MapKey注解后面的字段(如@MapKey("id"));
- Map的value:也是一個(gè)Map,表示查詢出這條記錄的每個(gè)字段的字段名稱和字段值。
具體示例
1. mapper.xml文件
<select id="getInfoById" resultType="java.util.Map"> ?? ?select ?? ?ext.id as id, ?? ?info.produce_area as area, ?? ?ext.attribute_value as companyName ?? ?from product_info info ?? ?left join product_ext ext on info.id=ext.id ?? ?where info.id=#{id} and ext.attribute_name=#{name} </select>
2. dao.java
@MapKey("id") Map<Long,Map<String,String>> getInfoById(@Param("id") Long id, @Param("name") String name);
3. manager.java
// 查詢,返回結(jié)果:{1={area:上海,companyName=西西公司}} // 如果是多條記錄,返回結(jié)果如:{1={area:上海,companyName:西西公司},2={area:南京,compantyName:猴猴公司}} Map<Long, Map<String, String>> map = productDao.getInfoById(id, "公司名稱");? if(map==null || map.isEmpty() || !map.containsKey(id)){ ? ? return null; } // 獲取結(jié)果 String area = produceInfoMap.get(id).get("area"); String companyName = produceInfoMap.get(productTracInfoId).get("companyName");
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Java使用@EnableEurekaServer實(shí)現(xiàn)自動(dòng)裝配詳解
這篇文章主要介紹了Java使用@EnableEurekaServer實(shí)現(xiàn)自動(dòng)裝配過程,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧2022-10-10Spring實(shí)戰(zhàn)之容器中的工程Bean用法示例
這篇文章主要介紹了Spring實(shí)戰(zhàn)之容器中的工程Bean用法,結(jié)合實(shí)例形式分析了Sring框架容器中的工程Bean相關(guān)配置、使用操作技巧,需要的朋友可以參考下2019-11-11idea一招搞定同步所有配置(導(dǎo)入或?qū)С鏊信渲?
使用intellij idea很長(zhǎng)一段時(shí)間,軟件相關(guān)的配置也都按照自己習(xí)慣的設(shè)置好,如果需要重裝軟件,還得需要重新設(shè)置,本文就詳細(xì)的介紹了idea 同步所有配置,感興趣的可以了解一下2021-07-07SpringBoot項(xiàng)目中使用緩存Cache的正確方法分享
緩存可以通過將經(jīng)常訪問的數(shù)據(jù)存儲(chǔ)在內(nèi)存中,減少底層數(shù)據(jù)源如數(shù)據(jù)庫的壓力,從而有效提高系統(tǒng)的性能和穩(wěn)定性。本文就來講講SpringBoot項(xiàng)目中使用緩存Cache的正確姿勢(shì)吧2023-04-04淺談spring-boot的單元測(cè)試中,@Before不被執(zhí)行的原因
這篇文章主要介紹了淺談spring-boot的單元測(cè)試中,@Before不被執(zhí)行的原因,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-04-04JAVA實(shí)現(xiàn)二維碼生成加背景圖代碼實(shí)例
這篇文章主要介紹了JAVA實(shí)現(xiàn)二維碼生成加背景圖代碼實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-12-12