当没有找到行时,iBat不会填充对象

Omn*_*ent 8 java oracle ibatis

我正在运行一个存储过程,返回2个游标,但没有任何数据.我有以下映射xml:

<resultMap id="resultMap1" class="HashMap">
  <result property="firstName" columnIndex="2"/>
</resultMap>

<resultMap id="resultMap2" class="com.somePackage.MyBean">
  <result property="unitStreetName" column="street_name"/>
</resultMap>

<parameterMap id="parmmap" class="map">
  <parameter property="id" jdbcType="String" javaType="java.lang.String" mode="IN"/>
  <parameter property="Result0" jdbcType="ORACLECURSOR" javaType="java.sql.ResultSet" mode="OUT" resultMap="resultMap1"/>
  <parameter property="Result1" jdbcType="ORACLECURSOR" javaType="java.sql.ResultSet" mode="OUT" resultMap="resultMap2"/>
</parameterMap>

<procedure id="proc" parameterMap="parmmap">
    { call my_sp (?,?,?) }
</procedure>
Run Code Online (Sandbox Code Playgroud)

第一个结果集放在一个HashMap中......第二个resultSet被放在一个MyBean类中.

我DAO中的代码如下:

HashMap map = new HashMap()
map.put("id", "1234");
getSqlMapClientTemplate().queryForList("mymap.proc", map);
HashMap result1 = (HashMap)((List)parmMap.get("Result0")).get(0);
MyBean myObject = (MyBean)((List)parmMap.get("Result1")).get(0);//code fails here
Run Code Online (Sandbox Code Playgroud)

在上面的最后一行..我的代码失败.它失败,因为第二个游标没有行,这就是为什么没有任何东西放入列表.但是,第一个游标也没有返回任何内容,但由于结果被放入HashMap第一个游标的列表中,因此至少有HashMap对象在其中.

为何如此区别?有没有办法让iBatis将MyBean的对象放在列表中,即使没有返回行?或者我应该在DAO中处理这个......我想避免在DAO中处理它,因为我有一大堆这样的DAO.

gio*_*iga 0

实际上,我相信Result1行为是正确的(没有结果应该总是导致空列表)。

\n\n

在您仔细检查这Result0确实是一个空游标(而不是 - 例如 - 具有一个全字段均为空行的游标)之后,我想您可能会开始寻找 iBatis 中的错误:)

\n\n

至于你的第二个问题,我不相信 iBatis 可以帮助你(或者它应该:这种默认不是数据库⇔应用程序接口的一部分,因此最好在 DAO \xe2\x80\x93 甚至可能中处理进一步提高您的服务层次结构)。

\n