以下MyBatis XML映射器代码应将列'value'聚合到相应的数组中。
<resultMap id="cubeTextsHana" type="com.myDao">
<id property="attribute" column="attribute" javaType="String" />
<collection property="valueList" ofType="java.lang.String" javaType="String[]">
<result column="value" />
</collection>
不幸的是,这不起作用,因为MyBatis声明Class/TypeAlias 'String[]' not found.
。当我更改javaType="list"
以及DAO中的相应类型时,它可以正常工作。
有没有办法将<collection>
用于简单的数组类型(例如String)而不是Collection类型?
答案 0 :(得分:1)
resultMap集合处理发生在类 org.apache.ibatis.executor.resultset.DefaultResultSetHandler
中Java Array不是集合( instantiateCollectionPropertyIfAppropriate(ResultMapping,MetaObject)) 然后没有方法添加( linkObjects(MetaObject,ResultMapping,Object))
使用Collection类型,在target属性中设置集合的新实例,然后将所有结果添加到其中。属性指向Collection,有时(在ArrayList的情况下)扩展其内部数组,实际上复制到更大的数组。而java数组是直接设置和指向的,而每个新元素都是数组需要重新定义数组和重置属性。
所以我认为java数组支持的结果图集合没有实现,需要实现集合管理机制的一部分(那将是什么意思?)
我猜您可以将结果映射到列表,如果需要,可以在属性上调用 Collection#toArray()。