我有一些Oracle函数返回SYS_REFCURSOR:
CREATE OR REPLACE FUNCTION SOME_PKG.SOME_FUNCION ()
RETURN SYS_REFCURSOR
AS
REF_TEST SYS_REFCURSOR;
BEGIN
OPEN REF_TEST FOR
SELECT COLUMN_ID, COLUMN_NAME
FROM SOME_TABLE;
RETURN REF_TEST;
END;
Java bean:
public class Product {
private String id;
private String name;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
Java映射器接口:
public interface ProductMapper {
List<Product> getAll();
}
ProductMapper.xml:
...
<resultMap id="productResults" type="Product">
<result property="id" column="COLUMN_ID" />
<result property="name" column="COLUMN_NAME" />
</resultMap>
<select id="getAll" resultMap="productResults">
select SOME_PKG.SOME_FUNCION from dual
</select>
如果我执行SQL查询&#34;从双&#34;中选择SOME_PKG.SOME_FUNCION。手动返回3条记录
致电&#34; getAll&#34;方法我收到List只有一个null元素。
我正在使用MyBatis 3.2.3
我该怎么做才能得到正确的结果?
答案 0 :(得分:1)
如果您不期望的结果集使用更新标记和调用函数
<update id="getAll" statementType="CALLABLE">
{ #{holder.products, jdbcType=CURSOR, mode=OUT, resultMap=productResults, javaType=java.sql.ResultSet} = call SOME_PKG.SOME_FUNCION() }
</update>
但由于产品是一个OUT参数,它应该作为一个传递,很可能你必须修改映射器
public class Holder {
public List<Products> products;
}
public class Mapper {
void getAll(Holder holder);
}