- 项目问题
spring boot 整合Mybatis3开发需要多个Map
批量从数据查出若干条数据,包括productId和productCapacity两个字段。不通过List而是使用Map接收查询结果,最后通过map.get(productId)方便地获取productCapacity的值。
Mybatis3的代码
/** * 查询车间负荷 * * @param year * @return 车间负荷 */ public Map<Long,Long> selectWorkshopItemByYear(@Param("year") String year);shuj
返回数据结构
结果执行的时候报错
Caused by: org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.exceptions.TooManyResultsException: Expected one result (or null) to be returned by selectOne(), but found: 5
- 问题原因
通过错误抛出,程序希望返回一行,但实际select得到的5行记录。因此报错了。
- 解决之道
而实际我是需要多个Map,利用mybatis的注解@MapKey即可解决
Mybatis官方文档的对该注解的解释
注解 | 使用对象 | 描述 |
---|---|---|
@MapKey | 方法 | 这是一个用在返回值为 Map 的方法上的注解。它能够将存放对象的 List 转化为 key 值为对象的某一属性的 Map。属性有: value ,填入的是对象的属性名,作为 Map 的 key 值 |
/** * 查询车间负荷 * * @param year * @return 车间负荷 */ @MapKey("productId") public Map<Long,Long> selectWorkshopItemByYear(@Param("year") String year);