Oracle11g MyBatis 3.x正在尝试读取集合并填充对象

Oracle11g MyBatis 3.x正在尝试读取集合并填充对象,oracle11g,mybatis,Oracle11g,Mybatis,我是MyBatis的新手,我的项目要求我从Oracle数据库读取数据,填充对象,必要时重置数据并将其插入数据库 我正在尝试读取嵌套表的数据。嵌套表列由Oracle定义的自定义对象的集合组成。更具体地说,表中的每个记录都与自定义对象的集合相关联,自定义对象由三个字段组成,即昵称、出生日期和地址 在尝试检索数据时,我实际上得到了一个oracle.sql.ARRAY数据类型。这里的问题是,我无法将JDBC通过MyBatis获取的oracle.sql.ARRAY映射到我的对象。我所能做的就是让数组将其转

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

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

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


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

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

我认为您可以使用自定义的
类型处理程序来实现这一点

在结果映射中,执行以下操作:

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


然后在
CustomArrayHandler.getResult()
实现中,您可以解析真实的列名并进行索引。然后从结果集中检索数组,并从索引中获取所需的值。

谢谢您的回复。我确实玩过结果图,但没用。如果其他人遇到同样的问题,请告诉我您是否有任何建议。AngerClown回答得很好,请使用类型处理程序。有关编写数组的信息,请参见此问题。