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

 更新时间:2022年01月23日 08:57:20   作者:shadow_zed  
这篇文章主要介绍了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");

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

相关文章

  • Java使用@EnableEurekaServer实现自动装配详解

    Java使用@EnableEurekaServer实现自动装配详解

    这篇文章主要介绍了Java使用@EnableEurekaServer实现自动装配过程,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习吧
    2022-10-10
  • Java synchronize线程安全测试

    Java synchronize线程安全测试

    这篇文章主要介绍了Java synchronize线程安全测试,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-04-04
  • Spring实战之容器中的工程Bean用法示例

    Spring实战之容器中的工程Bean用法示例

    这篇文章主要介绍了Spring实战之容器中的工程Bean用法,结合实例形式分析了Sring框架容器中的工程Bean相关配置、使用操作技巧,需要的朋友可以参考下
    2019-11-11
  • idea一招搞定同步所有配置(导入或导出所有配置)

    idea一招搞定同步所有配置(导入或导出所有配置)

    使用intellij idea很长一段时间,软件相关的配置也都按照自己习惯的设置好,如果需要重装软件,还得需要重新设置,本文就详细的介绍了idea 同步所有配置,感兴趣的可以了解一下
    2021-07-07
  • java实现图书检索系统

    java实现图书检索系统

    这篇文章主要为大家详细介绍了java实现图书检索系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-05-05
  • java -jar指定外部配置文件操作步骤

    java -jar指定外部配置文件操作步骤

    这篇文章主要给大家介绍了关于java -jar指定外部配置文件的相关资料,需要的朋友可以参考下
    2023-11-11
  • Spring核心方法refresh的使用解析

    Spring核心方法refresh的使用解析

    这篇文章主要介绍了Spring核心方法refresh的使用,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-08-08
  • SpringBoot项目中使用缓存Cache的正确方法分享

    SpringBoot项目中使用缓存Cache的正确方法分享

    缓存可以通过将经常访问的数据存储在内存中,减少底层数据源如数据库的压力,从而有效提高系统的性能和稳定性。本文就来讲讲SpringBoot项目中使用缓存Cache的正确姿势吧
    2023-04-04
  • 浅谈spring-boot的单元测试中,@Before不被执行的原因

    浅谈spring-boot的单元测试中,@Before不被执行的原因

    这篇文章主要介绍了浅谈spring-boot的单元测试中,@Before不被执行的原因,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-04-04
  • JAVA实现二维码生成加背景图代码实例

    JAVA实现二维码生成加背景图代码实例

    这篇文章主要介绍了JAVA实现二维码生成加背景图代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-12-12

最新评论