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

2022-07-18,,,,

目录
  • mybatis返回map结果集@mapkey使用场景
    • 使用id作为map的ke
    • map的value为map,一条记录对应一个map
    • 使用name作为map的key 
  • mybatis使用@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");

以上为个人经验,希望能给大家一个参考,也希望大家多多支持。

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

下载本文的Word格式文档,以方便收藏与打印。