Mybatis中注解@MapKey的使用方式
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
@MapKey("id")
Map<Long,Map<String,String>> getInfoById(@Param("id") Long id, @Param("name") String name);3. manager
// 查詢,返回結(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");
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
- MyBatis中?@Mapper?和?@MapperScan?的區(qū)別與使用解析
- Mybatis官方生成器的使用方式
- SpringBoot中使用MyBatis-Plus詳細(xì)步驟
- SpringBoot中使用MyBatis詳細(xì)指南
- SpringBoot如何使用MyBatisPlus逆向工程自動(dòng)生成代碼
- Springboot使用MybatisPlus實(shí)現(xiàn)mysql樂(lè)觀鎖
- MyBatis代碼自動(dòng)生成器Mybatis-Generator的使用詳解
- Mybatis-Plus中的MetaObjectHandler組件的使用
- MyBatis與其使用方法示例詳解
相關(guān)文章
idea找不到創(chuàng)建package包的選項(xiàng)問(wèn)題及解決方案
在IntelliJ IDEA中找不到創(chuàng)建package包選項(xiàng)?按照步驟操作即可顯示:右鍵選擇Mark Directory as -> Source Root2026-03-03
淺談Servlet的Cookie和Session機(jī)制
雖然session機(jī)制在web應(yīng)用程序中被采用已經(jīng)很長(zhǎng)時(shí)間了,但是仍然有很多人不清楚session機(jī)制的本質(zhì),以至不能正確的應(yīng)用這一技術(shù).本文將詳細(xì)討論session以及cookie的工作機(jī)制,需要的朋友可以參考下2021-05-05
詳解IDEA啟動(dòng)多個(gè)微服務(wù)的配置方法
這篇文章主要介紹了詳解IDEA啟動(dòng)多個(gè)微服務(wù)的配置方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-01-01
Springboot詳解RocketMQ實(shí)現(xiàn)廣播消息流程
RocketMQ作為一款純java、分布式、隊(duì)列模型的開源消息中間件,支持事務(wù)消息、順序消息、批量消息、定時(shí)消息、消息回溯等,本篇我們了解如何實(shí)現(xiàn)廣播消息2022-06-06
淺談Spring Cloud Gateway 轉(zhuǎn)發(fā) SSE 的那些坑
本文主要介紹了SSE在Gateway場(chǎng)景下的常見問(wèn)題題并提供了解決方案,包括禁止響應(yīng)緩存、正確配置超時(shí)設(shè)置、透?jìng)鱄eader等確保Gateway不加工SSE流式響應(yīng),幫助開發(fā)者避免常見錯(cuò)誤2026-06-06
Springcloud eureka搭建高可用集群過(guò)程圖解
這篇文章主要介紹了Springcloud eureka搭建高可用集群過(guò)程圖解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-04-04
spring-boot項(xiàng)目啟動(dòng)遲緩異常排查解決記錄
這篇文章主要為大家介紹了spring-boot項(xiàng)目啟動(dòng)遲緩異常排查解決記錄,突然在本地啟動(dòng)不起來(lái)了,表象特征就是在本地IDEA上運(yùn)行時(shí),進(jìn)程卡住也不退出,應(yīng)用啟動(dòng)時(shí)加載相關(guān)組件的日志也不輸出2022-02-02

