想要根据用户id和表中的字段列名查询出一些数据,其中用户id是多个,字段列名也是多个,不知xml中resultMap如何写
数据库表:user_baseinfo
userId | user_name | age | gender |
---|---|---|---|
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>
试试,如果你有驼峰命名的话,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>
不知道你这个问题是否已经解决, 如果还没有解决的话: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>