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

问题描述:

我是MyBatis的新手,我的项目需要我从Oracle数据库读取数据,填充对象,必要时重置数据并将其重新插入数据库。MyBatis 3.x试图读取一个集合并填充对象

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

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

我总是可以手动构建bean,但我知道它不是一个有效的方法。我想以它填充我的对象的方式来配置我的结果地图。但是,迄今为止我还没有做到这一点。如果有人对这个问题有什么建议,请帮助我。

+0

AngerClown回答得很好,使用类型处理程序。看到这个问题编写数组。 http://*.com/questions/5779584/how-do-you-write-arrays-to-an-oracle-10g-xe-db-using-ibatis – Andy 2012-02-03 19:12:26

我认为你可以得到这个工作与自定义TypeHandler

在你的ResultMap,做这样的事情:

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

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

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

+0

非常感谢回复。我确实玩过resultMap,但无济于事。如果其他人遇到同样的问题,请告诉我,如果您对我有任何建议。 – avidLearner 2012-02-02 19:18:03