MyBatis集合为Array类型

时间:2017-02-06 14:41:04

标签: java arrays mapping mybatis

以下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类型?

1 个答案:

答案 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()