文章目录
@MapKey介绍
在MyBatis中,@MapKey 主要用于在映射查询结果到一个Map。
当你执行一个查询并期望返回一个Map时,你可以使用@MapKey来进行结果集的映射。而Mybatis内部会将查询到的结果映射为一个key-value的形式。
@MapKey示例
有这么一个场景,需要查询用户列表,并转为Map,map的key为用户ID。
User类:
java
@Data
@TableName("sys_user")
public class User implements Serializable {
private static final long serialVersionUID = -6525322309638123441L;
@PropIgnore
@TableId(type = IdType.AUTO)
private Integer userId;
private String userName;
private String password;
private String salt;
private String phone;
private String sex;
private String email;
private String nickName;
private String address;
private Date createTime;
private Date updateTime;
}
- 传统的写法
Controller:
java
@ApiOperation(value="@MapKey获取用户列表",notes="@MapKey获取用户列表")
@GetMapping("getUsers")
public void getUsers() {
List<User> userList = userMapper.getUsers();
Map<Integer, User> userMap = userList.stream().collect(Collectors.toMap(User::getUserId, user -> user, (v1, v2) -> v1));
}
Mapper:
java
List<User> getUsers();
Mapper.xml:
java
<select id="getUsers" resultType="com.joker.pojo.User">
select * from sys_user limit 100
</select>
- @MapKey的写法
Controller:
java
@ApiOperation(value="@MapKey获取用户列表",notes="@MapKey获取用户列表")
@GetMapping("getUsers")
public void getUsers() {
Map<Integer, User> userMap = userMapper.getUserIdMapUsers();
}
Mapper:
java
@MapKey("userId")
Map<Integer, User> getUserIdMapUsers();
注意:userId为User类的字段名称,而非数据库表的字段名称
Mapper.xml:
java
<select id="getUserIdMapUsers" resultType="com.joker.pojo.User">
select * from sys_user limit 100
</select>