mybatis 返回结果有Map类型

想要根据用户id和表中的字段列名查询出一些数据,其中用户id是多个,字段列名也是多个,不知xml中resultMap如何写
数据库表:user_baseinfo

userIduser_nameagegender
1张三14
2李四24

期望的效果是这样的
返回值类型:

List<UserColumnValueDTO>

请求参数:

{
    "userId": [1,2],
    "fields": ["user_name","age","gender"],
}

返回参数:

[
    {
        "userId": 1,
        "fieldValueMap": {"user_name":"张三","age":"14","gender":"男"}
    },{
        "userId": 2,
        "fieldValueMap": {"user_name":"李四","age":"24","gender":"男"}
    }
]

UserColumnValueDTO如下


import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.util.Map;

@Data
@NoArgsConstructor
@AllArgsConstructor
public class UserFieldValueResponse {

    @ApiModelProperty(value = "用户身份id")
    private Long usertId;

    @ApiModelProperty(value = "字段值map,key为 表中的字段列名,value为对应的值")
    private Map<Long, String> columnValueMap;
}

dao中


    List<EcpUserFieldValueResponse> queryByColumns(@Param("columnName") List<String> columnName,
                                                   @Param("userIds") List<Long> userIds);

xml中应该怎么写

    <resultMap type="com.ala.yun.field.dto.UserFieldValueResponse " id="queryByColumns">
        <result property="userId" column="userId"/>
        <collection property="fieldValueMap" ofType="java.util.HashMap">

        </collection>
    </resultMap>
    <select id="queryByColumns" resultMap="queryByColumns">
        SELECT id AS user_id,
        <foreach collection="collect" item="collect" separator=",">
            ${collect}
        </foreach>
        FROM user_baseinfo WHERE id IN
        <foreach collection="userIds" item="userId" open="(" close=")" separator=",">
            #{userId}
        </foreach>
    </select>

参考 https://blog.csdn.net/weixin_42608402/article/details/118916177?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522169077290216800222819616%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=169077290216800222819616&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduend~default-2-118916177-null-null.142^v91^insertT0,239^v12^control2&utm_term=mybatis%20collection%E6%A0%87%E7%AD%BE%20colum&spm=1018.2226.3001.4187

试试,如果你有驼峰命名的话,property换下就可以了

<resultMap type="com.ala.yun.field.dto.UserFieldValueResponse" id="queryByColumns">

  <result property="userId" column="userId"/>
  
  <collection property="fieldValueMap" ofType="java.util.HashMap">
    <result column="user_name" property="fieldValueMap['user_name']"/>
    <result column="age" property="fieldValueMap['age']"/>
    <result column="gender" property="fieldValueMap['gender']"/>
  </collection>

</resultMap>

换了种写法,返回值类型改成

List<Map<String,String>>

这样就好写多了
xml代码

    <select id="queryByColumns" resultType="java.util.Map">
        SELECT id AS user_id,
        <foreach collection="collect" item="collect" separator=",">
            ${collect}
        </foreach>
        FROM user_baseinfo WHERE id IN
        <foreach collection="userIds" item="userId" open="(" close=")" separator=",">
            #{userId}
        </foreach>
    </select>
不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 这篇博客: Mybatis——ResultMap结果集中的 6.创建com.kuang.dao包,里面存放接口UserMapper以及接口实现类UserMapper.xml 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:

    UserMapper

    package com.kuang.dao;
    
    import com.kuang.pojo.User;
    
    import java.util.List;
    import java.util.Map;
    
    public interface UserMapper {
        
        //    根据用户id查询用户信息
        User getUserById(Integer id);
    
    }
    
    

    在这里插入图片描述
    UserMapper.xml

    <?xml version="1.0" encoding="UTF8" ?>
    <!DOCTYPE mapper
            PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
            "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
    <!--namespace=绑定一个对应的Dao/Mapper接口-->
    <mapper namespace="com.kuang.dao.UserMapper">
    
        <select id="getUserById" resultType="com.kuang.pojo.User" parameterType="Integer">
            select * from user where id=#{id}
        </select>
    
    </mapper>
    

    在这里插入图片描述


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^