我是MyBatis的新手,我的项目要求我从Oracle数据库中读取数据,填充对象,必要时重置数据并将其重新插入数据库。
我正在尝试读取嵌套表的数据。嵌套表列由Oracle定义的自定义对象的集合组成。更具体地说,表中的每个记录都与自定义对象的集合相关联,自定义对象由三个字段组成,即nickname
,date of birth
和address
。
我在尝试检索数据时实际上获得了oracle.sql.ARRAY
数据类型。我在这里遇到的问题是,我无法将JDBC通过MyBatis提取的oracle.sql.ARRAY
映射到我的对象。我所能做的就是让ARRAY将它转换为一个对象数组,然后转换为一个Struct并迭代通过属性来获取值。
我总是可以手工构建bean,但我知道它不是一种有效的方法。我想以填充对象的方式配置结果映射。但是,到目前为止我还没能做到这一点。如果有人对此问题有任何建议,请帮助我。
答案 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中检索数组并从索引中获取所需的值。