myBatis 执行oracle存储过程返回字段数不确定的结果集

lcm88058977 发布于 2016/10/14 17:23
阅读 1K+
收藏 0

我的oracle 存储过程有一个输出(out)参数,为游标(sys_refCursor)类型,但返回结果集字段数不确定,根据不同的情况,可能是5个字段,也可能是10个字段。

而在映射文件(mapper.xml)中,需要一个resultMap,由于字段数不确定,导致无法对其进行映射,请问该如何处理。

基本配置是这样的:

<select id ="getDeviceInfo" parameterType"map" statementType="CALLABLE" >               call P_getDeviceInfo(#{devTypeName, jdbcType=VARCHARmode=IN},                     #{result, mode=OUTjdbcType=CURSORresultMap=XXXMap})

</select >  


谢谢!

加载中
0
太黑_thj
太黑_thj

mybatis进行映射的时候是找你有数据的给你射进去,没有的就给你个null射进去,根本不需要担心你的数据对不上,只需要担心返回表头的字段名是否正确就可以了


0
求是科技
求是科技
楼上的正解,你只需要将可能返回的所有字段名写在resultMap里面就行,没有返回的字段,都会用null代替,用的时候,需要先判断这个字段是否为null,否则有潜在的错误。
0
l
lcm88058977

楼上同学,由于可能的字段累计800多个,每次仅返回其中一部分,我总不能把把800多个字段作为resultMap的属性一次性写进去吧。

由于存储过程涉及动态sql的处理,原本想用sql语句代替存储过程,这样在mapper的<select> 标签中配置属性resultType="HashMap",这样结果集将以List<Map<String,Object>> 作为返回值,是最佳解决方案,但存储过程不支持resultType,只支持resultMap,所以,还是想调用oracle存储过程。

求是科技
求是科技
这个就是使用mybatis的弊端,用spring的jdbctemplate或是纯的jdbc完成这个任务吧。
0
婕仪伟琪
婕仪伟琪
你返回游标了,再遍历游标,映射一下啊
0
l
lcm88058977
问题的关键是resultMap=XXXMap,由于返回不确定字段数,所以无法进行映射。如果去掉它,则运行时报错,如果加上它,又不知如何配置
0
谦虚的兔子

resultType="map" 不行吗?不管返回什么字段,直接放到map里。

当返回的数据用map装的时候,用resultType而不是resultMap

0
哈雷路亚
哈雷路亚

请问怎么后解决了吗?最近ibatis升级成mybatis也遇到这个问题

返回顶部
顶部