Mybatis中@MapKey注解具有什么功能呢?
下文笔者讲述Mybatis中@MapKey注解的功能简介说明,如下所示
@MapKey注解的功能
@MapKey:
是MyBatis框架的注解
@MapKey的功能:
将list结果集转换成key-value形式的Map结果集
使我们可以快速从结果集中查询指定结果
mapKey中的参数值作为map的key
@MapKey注解的示例
//dao层
@MapKey("id")
Map getStudents();
//xml层
<!--获取学生基本信息-->
<select id="getStudents" resultType="map">
SELECT id, idCard, name FROM students
</select>
@MapKey高级用法:
多表查询,id作为主键Id,其他的作为另一个map存储
例
Map<Long, Map<String, String>>。范型类型可以修改。
Map的key:
一般存储每条记录的主键,也可以用其他值表示
主要取决于Dao层@MapKey注解后面的字段(如@MapKey("id"));
Map的value:
也是一个Map
表示查询出这条记录的每个字段的字段名称和字段值。
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>
dao
@MapKey("id")
Map<Long,Map<String,String>> getInfoById(@Param("id") Long id, @Param("name") String name);
业务逻辑测试
// 查询,返回结果:{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");
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。


