mybatis返回map结果集@MapKey使用的场景分析

网友投稿 820 2022-09-01


mybatis返回map结果集@MapKey使用的场景分析

目录mybatis返回map结果集@MapKey使用场景使用id作为map的keMap的value为Map,一条记录对应一个Map使用name作为map的key mybatis使用@MapKey注解背景和含义具体示例

mybatis返回map结果集@MapKey使用场景

select的 resultType属性为map时:

通过MapKey指定map的key值

使用id作为map的ke

@MapKey("id")

Map getUserInfoMap();

Map的value为Map,一条记录对应一个Map

@MapKey("id")

Map> getUserValueMap();

使用name作为map的key

@MapKey("name")

Map getUserInfoMap();

..............返回一条记录...............

Map getUserInfoMapById();

mybatis使用@MapKey注解

背景和含义

背景:今天使用MyBatis查询一些记录,数据涉及到两个表里的数据,需要连表查询,但我MyBatis的返回结果不想创建新的DO对象,因此使用@MapKey注解返回一个Map集合。

含义:@MapKey注解用于mapper.xml文件中,一般用于查询多条记录中各个字段的结果,存储在Map中。Map结构的示例如下:Map>。范型类型可以修改。

Map的key:一般存储每条记录的主键,也可以用其他值表示,主要取决于Dao层@MapKey注解后面的字段(如@MapKey("id"));Map的value:也是一个Map,表示查询出这条记录的每个字段的字段名称和字段值。

具体示例

1. mapper.xml文件

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}

2. dao.java

@MapKey("id")

Map> getInfoById(@Param("id") Long id, @Param("name") String name);

3. manager.java

// 查询,返回结果:{1={area:上海,companyName=西西公司}}

// 如果是多条记录,返回结果如:{1={area:上海,companyName:西西公司},2={area:南京,compantyName:猴猴公司}}

Map> 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");


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Python教程:使用type、metaclass动态创建方法和属性
下一篇:Python3教程:列表字符串转数字(python将数字列表转化为字符串)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~