Mybatis使用association,结果返回数组
关于association、collection标签网上很多帖子,这里就不赘述,直接讲问题。
问题
我DAO接口返回的数据格式为 List<Map<String, Object>>
,Map中的数据对象为如下,Book是一个实体。
1 | <resultMap type="HashMap" id="PushInfo"> |
实际返回的结果,出现了格式不一致的问题:
1 | { |
解决方案
新建了BookPush实体类,指定book类型。
1 | <resultMap type="BookPush" id="PushInfo"> |
分析
仔细核查数据可以发现,当父查询返回的book_id有重复时,第二个book_id查出来的数据,返回的一定是一个数组。比如上面,book_id都为3249,第一个结果为实体,第二个结果为数组。
我猜测association标签在执行时,会将同一个事务中的数据缓存。先在缓存中查,发现有一个实体,所以就创建了数组,然后再执行sql,查出来的结果与缓存中的一样,所以数组中只有一个元素。
但是感觉跟数据类型也有关系
以后有空看看这部分的源码