场景一、将结果对象存入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中别名为驼峰命名。