mapper接口中使用@MapKey注解,发现map的结构与原本不一样
时间: 2023-07-16 16:16:03 浏览: 106
在 MyBatis 中,@MapKey 注解指定了一个属性名作为 map 的 key,而 MyBatis 默认使用查询结果的第一个列作为 key。如果你使用了 @MapKey 注解,那么查询结果中指定的属性将作为 map 的 key,而整个查询结果将作为 map 的 value。这可能会导致 map 的结构与原本不一样。
举个例子,假设你的查询结果是一个 User 对象的 List,每个 User 对象包含 id 和 name 两个属性。如果你使用了如下的 Mapper 接口定义:
```
public interface UserMapper {
@MapKey("id")
Map<Integer, User> getUsersMappedById();
}
```
那么查询结果将以 id 作为 map 的 key,User 对象作为 map 的 value。如果不使用 @MapKey 注解,查询结果将以 id 列作为 key,List<User> 对象作为 value。
如果你想要使用 @MapKey 注解,但是又希望查询结果中只包含指定的属性,可以使用 @Result 注解来指定查询结果中包含的属性。例如:
```
public interface UserMapper {
@MapKey("id")
@Results({
@Result(id = true, column = "id", property = "id"),
@Result(column = "name", property = "name")
})
Map<Integer, User> getUsersMappedById();
}
```
这样查询结果中只包含 id 和 name 两个属性,并且以 id 作为 map 的 key。
阅读全文