【问题标题】:Return null from procedure in MyBatis从 MyBatis 中的过程返回 null
【发布时间】:2013-07-15 18:44:29
【问题描述】:

我无法从程序中取回值。它在表上进行插入,并且必须返回一个代码。数据插入正确,但返回的代码始终为空。

<parameterMap id="callParameters" type="Call" >
   <parameter property="client" jdbcType="VARCHAR"  mode="IN"/>
   <parameter property="originalAnalyst" jdbcType="VARCHAR"  mode="IN"/>
   <parameter property="currentAnalyst" jdbcType="VARCHAR"  mode="IN"/>
   <parameter property="analystType" jdbcType="INTEGER" mode="IN"/>
   <parameter property="category" jdbcType="VARCHAR"  mode="IN"/>
   <parameter property="product" jdbcType="VARCHAR"  mode="IN"/>
   <parameter property="process" jdbcType="VARCHAR"  mode="IN"/>
   <parameter property="problem" jdbcType="VARCHAR"  mode="IN"/>
   <parameter property="priority" jdbcType="VARCHAR"  mode="IN"/>
   <parameter property="status" jdbcType="VARCHAR"  mode="IN"/>
   <parameter property="serviceType" jdbcType="VARCHAR"  mode="IN"/>
   <parameter property="abstract" jdbcType="VARCHAR"  mode="IN" />
   <parameter property="descript" jdbcType="VARCHAR"  mode="IN"/>
   <parameter property="nullField" jdbcType="VARCHAR"  mode="IN"/>
   <parameter property="returnField" jdbcType="VARCHAR"  mode="OUT"/>
   <parameter property="callNumber" jdbcType="VARCHAR"  mode="OUT" />
   <parameter property="currentDate" jdbcType="TIMESTAMP" mode="IN"  />
   <parameter property="constant1" jdbcType="INTEGER" mode="IN"/>
   <parameter property="constant0" jdbcType="INTEGER" mode="IN"/>
</parameterMap>
<select id="open-call"  parameterMap="callParameters" resultType="Call"  statementType="CALLABLE">
   {call ADMAHD30.spr_AutoReq(#{returnField},#{constant1},#{callNumber},#{currentDate},#{client},#{originalAnalyst},#{currentAnalyst},#{analystType},#{category},#{product},#{process},#{problem},#{nullField},#{priority},#{status},#{serviceType},#{abstract},#{descript},#{nullField},#{nullField},#{nullField},#{nullField},#{nullField},#{nullField},#{nullField},#{nullField},#{nullField},#{nullField},#{nullField},#{constant0})}
 </select>

所有这些属性都正确映射到我的对象中。有什么问题吗?

【问题讨论】:

  • 您使用的是哪个数据库?
  • 甲骨文。我无法更改任何程序或表格。它们来自另一个应用程序。
  • returnField 不会作为任何参数传递给过程。我猜nullFields 之一可能应该是returnField
  • 是的,没错。第一个参数应该是returnField,但仍然没有返回callNumber。
  • 您尝试使用 resultMap 吗?当我从 myBatis 调用过程时,我总是使用 resultMap 进行数据绑定

标签: java sql spring stored-procedures mybatis


【解决方案1】:

我对 myBatis 有点生疏了,但是如果您期望返回 String,为什么 resultType 不是“java.lang.String”?

编辑:使用 resultMap 而不是 resultType 怎么样(假设 sp 已经为返回参数指定了一个名称):

<resultMap id="CallResultMap" type="com...Call">
        <result property="callNumber" column="callNumberCol"/>
        <result property="returnField" column="returnFieldCol"/>
</resultMap>

然后将结果参数包含在您的 parameterMap 中。

【讨论】:

  • 因为程序上有2个参数OUT。其中之一是我需要的代码。
猜你喜欢
  • 2022-01-03
  • 2017-11-06
  • 2013-10-18
  • 1970-01-01
  • 2014-08-04
  • 2013-11-14
  • 1970-01-01
  • 2012-12-08
  • 1970-01-01
相关资源
最近更新 更多