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

目录
  • 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");

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

(0)

相关推荐

  • MyBatis Map结果的Key转为驼峰式

    MyBatis 配置文件中,支持下面这几种配置: properties, settings, typeAliases, typeHandlers, objectFactory, objectWrapperFactory, reflectorFactory, plugins, environments, databaseIdProvider, mappers 我们使用objectWrapperFactory来解决这个问题. 配置这个属性时,必须遵守上面属性配置的顺序进行配置(在objectFact

  • mybatis 返回Map类型key默认为大写问题

    目录 返回Map类型key默认为大写 在工作中发现的问题 修改方法 关于mybatis返回map的坑 Map中key是分大小写的 返回Map类型key默认为大写 在工作中发现的问题 默认情况下,当resultType="java.util.Map"时,返回的key值都是大写的!! <select id="getSystemDataOutZxwtList" resultType="java.util.Map"> </select&

  • mybatis返回类型map时如何将key大写转为小写

    亲测: SELECT DEPTNO as "deptno",DEPTNAME,DEPTGRADE,PARENTDEPT FROM VMGR_DEPT ORDER BY DEPTGRADE,DEPTNO 别人案例: <select id="selectBlogRetHashMap" parameterType="int" resultType="map"> SELECT id AS "id", t

  • mybatis返回key value map集合方式

    目录 mybatis返回key value map集合 mybatis返回map,key为主键,value为对象 mybatis返回key value map集合 XML:文件 <select id="getData" resultMap="userMap" >     SELECT id,name FROM user         </select>   <resultMap id="userMap" type=

  • mybatis 返回Map类型key改为小写的操作

    默认情况下,当resultType="java.util.Map"时,返回的key值都是大写的. 现在想key改成自己想要的,只需为查询出来的字段增加个别名即可. 如: <select id="getStudentList" resultType="java.util.Map"> select t.name as "sName",t.sex as "sSex" from student <

  • Mybatis中注解@MapKey的使用详解

    mybatis的原身是ibatis,现在已经脱离了apache基金会,新官网是http://www.mybatis.org/. 在研究Mybatis源码之前并不知道这个注解的妙用的,但是当我看到参数解析的时候 有这个一个注解,所以我了解了一下,当我们返回像Map<String, Map<String, Object>>这种类型的时候,我们往往很难做到,因为这里面可能是多个表的数据,所以我们不可能再建一个模型. 这时候我们就可以使用这个注解了 @Retention(Retention

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

    目录 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> getU

  • Mybatis返回Map数据方式示例

    目录 一. 方式1 接口 调用 二. 方式2 接口 调用 三. 方式3 接口 调用 一. 方式1 接口 public interface UserMapper { List<Map<String, String>> selectTestData1(); } <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//

  • Mybatis返回map集合时,列的顺序与select不一致问题

    目录 返回map集合,列的顺序与select不一致 mybatis中返回map集合问题 1.mapper.xml中写一个查询返回map的sql 2.mapper.java 对应接收 3.错误写法 4.正确写法 返回map集合,列的顺序与select不一致 <select id="queryPercentByAsset" resultType="java.util.HashMap"> 将Hashmap换成LinkedHashMap即可 <select

  • mybatis返回map类型数据空值字段不显示的解决方案

    目录 mybatis返回map数据空值字段不显示 查询sql添加每个字段的判断空 ResultType利用实体返回 springMVC+mybatis查询数据 mybatis返回map空值未返回字段 mybatis开启CallSettersOnNulls mybatis返回map数据空值字段不显示 查询sql添加每个字段的判断空 IFNULL(rate,'') as rate ResultType利用实体返回 不用map springMVC+mybatis查询数据 返回resultType=”m

  • mybatis-plus返回map自动转驼峰配置操作

    mybatis-plus返回map自动转驼峰配置object-wrapper-factory不生效问题解决:配置map-underscore-to-camel-case: true不生效问题解决 很多时候我们工作中查询很多字段的时候一般是返回一个VO来接收,这个时候我们只要在yml中配置了 map-underscore-to-camel-case: true 就会自动将查询数据库的字段带下划线的属性转成对应实体类VO中驼峰命名的属性. 但是会经常有这种场景:例如我们只查询2个字段要返回给前端,这

  • Spring Data JPA实现查询结果返回map或自定义的实体类

    目录 Spring Data JPA查询结果返回map或自定义的实体类 1.工具类 2.具体应用 spingboot:jpa:Spring data jpa 返回map 结果集 Spring Data JPA查询结果返回map或自定义的实体类 在JPA中我们可以使用entityManager.createNativeQuery()来执行原生的SQL语句,并且JPA的底层实现都是支持返回Map对象的. 例如: EclipseLink 的 query.setHint(QueryHints.RESUL

  • Spring Data JPA实现查询结果返回map或自定义的实体类

    目录 SpringDataJPA查询结果返回map或自定义的实体类 1.工具类 2.具体应用 spingboot:jpa:Springdatajpa返回map结果集 Spring Data JPA查询结果返回map或自定义的实体类 在JPA中我们可以使用entityManager.createNativeQuery()来执行原生的SQL语句,并且JPA的底层实现都是支持返回Map对象的. 例如: EclipseLink 的 query.setHint(QueryHints.RESULT_TYPE

随机推荐