今天继续完善一下mybatis系列相关博客,以便查阅,同时也希望能帮助到有需要的小伙伴,各位看到此博客的小伙伴,如有不对的地方请及时通过私信我或者评论此博客的方式指出,以免误人子弟。多谢!
目录
resultType返回map
单条记录封装成一个map
多条记录封装成一个map
先看下官方文档对resultType属性的表述:resultType结果的类型。通常 MyBatis 可以推断出来,但是为了更加准确,写上也不会有什么问题。MyBatis 允许将任何简单类型用作主键的类型,包括字符串。如果生成列不止一个,则可以使用包含期望属性的 Object 或 Map。
对于resultType为对象的在之前的博客中一直都是这么用的,比如:
返回的map中,key就是列名,value就是列值。
Mapper接口中:
Map testResultMap(int id);
Mapper.xml中:
单条记录封装成一个map,除了像上面那样使用Map
HashMap selectHashMap(int id);
Map testResultMap(int id);
Map testResultMap0(int id);
上面这只是查一条记录并返回map,如果我们想查询用户列表,并将结果封装到一个map中怎么使用呢,我们试下:
Mapper接口中:
Map testResultMap2();
Mapper.xml中:
此时查询会报错:
org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.exceptions.TooManyResultsException: Expected one result (or null) to be returned by selectOne(), but found: 21
我们可以通过使用@MapKey注解来解决上面的问题,先看下官方文档中对于@Mapkey的表述:
这是一个用在返回值为 Map 的方法上的注解。它能够将存放对象的 List 转化为 key 值为对象的某一属性的 Map。属性有:
value
,填入的是对象的属性名,作为 Map 的 key 值。
我们可以使用@Mapkey注解指定封装map时使用对象的哪个属性来作为key,通常我们使用主键就可以,或者唯一索引,确保key不会重复。
只要改下Mapper接口中的方法即可:
@MapKey(value = "id")
Map testResultMap2();
同返回单条记录一样,返回多条记录封装成map也有三种接收方式, 如下:
List selectHashMap1();
@MapKey(value = "id")
Map> testResultMap1();
@MapKey(value = "id")
Map testResultMap2();
只是获取结果时List
后两种接收方式的封装结果相同,如下:
如果我的博客对你有帮助,欢迎进行评论✏️✏️、点赞、收藏⭐️⭐️,满足一下我的虚荣心 。