文章目录
- 一. 背景和含义
- 二. 具体示例
- 1. 文件
- 2.
- 3.
- 参考资料
一. 背景和含义
- 背景:今天使用MyBatis查询一些记录,数据涉及到两个表里的数据,需要连表查询,但我MyBatis的返回结果不想创建新的DO对象,因此使用@MapKey注解返回一个Map集合。
- 含义:@MapKey注解用于文件中,一般用于查询多条记录中各个字段的结果,存储在Map中。Map结构的示例如下:
Map<Long, Map<String, String>>
。范型类型可以修改。- Map的key:一般存储每条记录的主键,也可以用其他值表示,主要取决于Dao层@MapKey注解后面的字段(如
@MapKey("id")
); - Map的value:也是一个Map,表示查询出这条记录的每个字段的字段名称和字段值。
- Map的key:一般存储每条记录的主键,也可以用其他值表示,主要取决于Dao层@MapKey注解后面的字段(如
二. 具体示例
1. 文件
<select id="getInfoById" resultType="">
select
as id,
info.produce_area as area,
ext.attribute_value as companyName
from product_info info
left join product_ext ext on =
where =#{id} and ext.attribute_name=#{name}
</select>
2.
@MapKey("id")
Map<Long,Map<String,String>> getInfoById(@Param("id") Long id, @Param("name") String name);
3.
// 查询,返回结果:{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");
参考资料
MyBatis使用@MapKey注解接收多个查询记录到Map中