mybatis返回map結(jié)果集@MapKey使用的場景分析
mybatis返回map結(jié)果集@MapKey使用場景
select的 resultType屬性為map時(shí):
通過MapKey指定map的key值
使用id作為map的ke
@MapKey("id")
Map<Long, UserInfo> getUserInfoMap();Map的value為Map,一條記錄對應(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對象,因此使用@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 實(shí)戰(zhàn)項(xiàng)目之小說在線閱讀系統(tǒng)的實(shí)現(xiàn)流程
讀萬卷書不如行萬里路,只學(xué)書上的理論是遠(yuǎn)遠(yuǎn)不夠的,只有在實(shí)戰(zhàn)中才能獲得能力的提升,本篇文章手把手帶你用java+SSM+jsp+mysql+maven實(shí)現(xiàn)前臺(tái)閱讀后臺(tái)管理的小說在線閱讀系統(tǒng),大家可以在過程中查缺補(bǔ)漏,提升水平2021-11-11
JavaSE實(shí)現(xiàn)圖書管理系統(tǒng)的示例代碼
這篇博客是在學(xué)習(xí)了一部分Java基礎(chǔ)語法之后的練習(xí)項(xiàng)目,通過這個(gè)小項(xiàng)目的練習(xí),對Java中的類和對象,抽象類和接口等進(jìn)行熟悉理解??旄S小編一起學(xué)習(xí)學(xué)習(xí)吧2022-08-08

