我正在使用mybatis-spring并尝试从oracle映射引用游标。结果返回null。有什么想法吗?
<select id="check" parameterType="myVO"
resultMap="VOResultMap" statementType="CALLABLE" resultType="object">
{ call MYPKG.proc_check(
#{myVO.id, javaType=String, jdbcType=VARCHAR,mode=IN},
#{myVO, mode=OUT, javaType=ResultSet, jdbcType=CURSOR, resultMap=VOResultMap}
)}
SP:
PROCEDURE proc_check (
p_id IN VARCHAR2, po_outCursor OUT SYS_REFCURSOR)
IS
BEGIN
OPEN po_outCursor FOR
SELECT * FROM MYTABLE;
END;
地图:
<resultMap id="VOResultMap" type="myVO">
<result property="action" column="ACTION" />
<result property="id" column="ID" />
<result property="name" column="NAME" />
</resultMap>
DAO:
public MyVO check(@Param("VO") MyVO myVO);
用法:
MyVO myVO = new MyVO(id);
MyVO obj = myDAO.check(myVO);
// obj is null !!
非常感谢,
答案 0 :(得分:1)
我只是在澄清以上帖子中提供的答案。
您需要定义与bean类成员相同的映射,这是为了确保refcursor列自动映射到map中的属性和bean对象列表。
Mapper.xml
<select id="check"
parameterType="java.util.Map"
resultMap="VOResultMap" statementType="CALLABLE">
{ call MYPKG.proc_check(
#{id, javaType=String, jdbcType=VARCHAR,mode=IN},
#{myVO, mode=OUT, javaType=ResultSet, jdbcType=CURSOR, resultMap=VOResultMap}
)}
</select>
<!-- In the out parameter you need to mention the DTO as it's signature is same as sysrefcursor.
There is no difference between sysrefcursor and refcursor except for the creation of the type of refcursor in the proc body or in package -->
<resultMap id="VOResultMap" type="myVO">
<result property="action" column="ACTION" />
<result property="id" column="ID" />
<result property="name" column="NAME" />
</resultMap>
DAO应该如下所示:
public void check(Map response);
由于响应和请求包含在映射中,因此DAO中不会指定任何返回类型。另外,响应数据也绑定到Bean对象列表。
用法:
Map responseMap = new HashMap();
responseMap.put("id","identifier");
myDAO.check(responseMap);
List<MyVO> responseList = (List<MyVO>) responseMap.get("myVO");
for (MyVO myVO : responseList) {
your logic....
}
答案 1 :(得分:0)
好的,从java方面你需要使用地图。
在xml中设置parameterType =“java.util.Map” 在Java中放入“in”参数,即map.put(“id”,identifier);
界面现在可以返回void。 然后调用界面,如myDAO.check(myMap);
之后调用myMap.get(“myVO”),您将获得一个List。