mybatis返回map結果集@MapKey使用的場景分析
mybatis返回map結果集@MapKey使用場景
select的 resultType屬性為map時:
通過MapKey指定map的key值
使用id作為map的ke
@MapKey("id") Map<Long, UserInfo> getUserInfoMap();
Map的value為Map,一條記錄對應一個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查詢一些記錄,數據涉及到兩個表裡的數據,需要連表查詢,但我MyBatis的返回結果不想創建新的DO對象,因此使用@MapKey註解返回一個Map集合。
含義:@MapKey註解用於mapper.xml文件中,一般用於查詢多條記錄中各個字段的結果,存儲在Map中。Map結構的示例如下:Map<Long, Map<String, String>>。范型類型可以修改。
- Map的key:一般存儲每條記錄的主鍵,也可以用其他值表示,主要取決於Dao層@MapKey註解後面的字段(如@MapKey("id"));
- Map的value:也是一個Map,表示查詢出這條記錄的每個字段的字段名稱和字段值。
具體示例
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
// 查詢,返回結果:{1={area:上海,companyName=西西公司}} // 如果是多條記錄,返回結果如:{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; } // 獲取結果 String area = produceInfoMap.get(id).get("area"); String companyName = produceInfoMap.get(productTracInfoId).get("companyName");
以上為個人經驗,希望能給大傢一個參考,也希望大傢多多支持WalkonNet。
推薦閱讀:
- MyBatis在DAO層定義接口返回類型泛型無效的解決
- mybatis接口綁定失效的解決
- Mybatis如何通過出入Map參數作為條件進行查詢
- Mybatis查詢返回Map<String,Object>類型實例詳解
- 淺談mybatisPlus的Ipage分頁和map參數的問題