MyBatis 3.x试图读取一个集合并填充对象

时间:2012-02-02 15:44:56

标签: oracle11g mybatis

我是MyBatis的新手,我的项目要求我从Oracle数据库中读取数据,填充对象,必要时重置数据并将其重新插入数据库。

我正在尝试读取嵌套表的数据。嵌套表列由Oracle定义的自定义对象的集合组成。更具体地说,表中的每个记录都与自定义对象的集合相关联,自定义对象由三个字段组成,即nicknamedate of birthaddress

我在尝试检索数据时实际上获得了oracle.sql.ARRAY数据类型。我在这里遇到的问题是,我无法将JDBC通过MyBatis提取的oracle.sql.ARRAY映射到我的对象。我所能做的就是让ARRAY将它转换为一个对象数组,然后转换为一个Struct并迭代通过属性来获取值。

我总是可以手工构建bean,但我知道它不是一种有效的方法。我想以填充对象的方式配置结果映射。但是,到目前为止我还没能做到这一点。如果有人对此问题有任何建议,请帮助我。

2 个答案:

答案 0 :(得分:1)

这需要Mybatis中的大量Oracle特定代码,我知道他们一直试图避免使用特定于RDMS的代码。我会编写自己的数据映射器,将数组映射到您需要的任何模型对象。

答案 1 :(得分:1)

我认为您可以使用自定义TypeHandler

在ResultMap中,执行以下操作:

<result property="arrayOne" column="array[1]" typeHandler="customArrayHandler" />
<result property="arrayTwo" column="array[2]" typeHandler="customArrayHandler" />

然后在CustomArrayHandler.getResult()实现中,您可以解析实际的列名和索引。然后从ResultSet中检索数组并从索引中获取所需的值。