mybatis查询结果封装成map类型

场景一、将结果对象存入map对象

使用场景

查询结果未定义实体类,也不想为它单独定义一个实体类

使用效果
表的字段名对应map中的key字段所属的值对应map中的value

Mapper接口

public interface UserMapper {
    Map<String, Object> selectUserById(int id);
    List<Map<String, Object>> selectUserList();
}

Mapper xml

<mapper namespace="top.jiug.mybatis.mapper.UserMapper">
    <select id="selectUserById" resultType="map">
        select id,name,id_card_num,age from t_user where id=#{id}
    </select>
    <select id="selectUserList" resultType="map">
        select id,name,id_card_num,age from t_user 
    </select>
</mapper>

查询结果

selectUserById:
{
	id:1,
	name:"keffett",
	id_card_num:"XXX...",
	age:18
}
selectUserList:
[
	{
		id:1,
		name:"keffett",
		id_card_num:"XXX...",
		age:18
	},
	...
]

注意
1、Mapper接口中报红@MapKey is required不影响程序运行,强迫症者可以百度解决;
2、查询字段名作为map中的key并不会将下划线命名转为驼峰命名,如果想要结果为驼峰命名,可通过别名,例如id_card_num as idCardNum

场景二、将查出数据的其中一列作为map的key,整条数据对象作为map的value

使用场景

将查询结果存入map,方便通过某个属性值 (map的key) 快速的获取对象

Mapper接口

public interface UserMapper {
    @MapKey("idCardNum")
    Map<String,User> selectMapUseCardNum();
}

Mapper xml

<mapper namespace="top.jiug.mybatis.mapper.UserMapper">
    <resultMap type="top.jiug.mybatis.model.User" id="userMapping">
        <result property="id"    column="id"    />
        <result property="name"    column="name"    />
        <result property="idCardNum"    column="id_card_num"    />
        <result property="age"    column="age"    />
    </resultMap>
    <select id="selectIdCardNum" resultMap="userMapping">
        select id,name,id_card_num,age from t_user 
    </select>
</mapper>

查询结果

{
	"XXX...":{
		id:1,
		name:"keffett",
		idCardNum:"XXX...",
		age:18
	},
	"YYY...":{
		id:2,
		name:"jiug",
		idCardNum:"YYY...",
		age:19
	}
}

注意
Mapper xml中如果想用resultType代替resultMap@MapKey(“value”)中value需要在SQL中别名为驼峰命名。

  • 5
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

必成公

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值