Mybatis에서 Procedure 호출 시 Cursor 리턴
- 작성자 :
- 박*원
- 작성일 :
- 2021-05-20 08:37:14
- 조회수 :
- 6,946
- 구분 :
- 개발환경 / 3.0
- 진행상태 :
- 완료
Q
# mapper
<parameterMap id="parameter_map" type="HashMap">
<parameter property="p_result" jdbcType="CURSOR" javaType="java.sql.ResultSet" mode="OUT" resultMap ="rs"/>
</parameterMap>
<resultMap id="rs" type="HashMap">
<result property="payamt" column="PAYAMT" />
<result property="reason" column="REASON" />
</resultMap>
<select id="procedureTest" parameterMap = "parameter_map" statementType="CALLABLE">
<![CDATA[
{
CALL [패키지명].[프로시저명]( ? )
}
]]>
</select>
클래스에서 해당 프로시저를 호출하는 함수를 작성하면,
---------------------------- 아래 에러 -----------------------------------
### Error querying database. Cause: org.apache.ibatis.reflection.ReflectionException: Could not set property 'p_result' of 'class java.lang.Class' with value '[{reason=3, payamt=1000}]' Cause: org.apache.ibatis.reflection.ReflectionException: There is no setter for property named 'p_result' in 'class java.lang.Class'
### The error may exist in mapper.xml
### The error may involve com.tnc.program.SlipToMIS2.parameter_map
### The error occurred while setting parameters
### SQL: { CALL [패키지명].[프로시저명](?) }
### Cause: org.apache.ibatis.reflection.ReflectionException: Could not set property 'p_result' of 'class java.lang.Class' with value '[{reason=3, payamt=1000}]' Cause: ....
------------------------------------------------------------------------------
p_result를 파라미터맵에서 세팅해줘도 setter가 없다고 뜨며, 프로시저 호출 결과 값은 에러창에 제대로 나오는 상황입니다.
해당 문제를 해결 할 수 있는 방법이 있다면 답변 부탁드립니다.
<parameterMap id="parameter_map" type="HashMap">
<parameter property="p_result" jdbcType="CURSOR" javaType="java.sql.ResultSet" mode="OUT" resultMap ="rs"/>
</parameterMap>
<resultMap id="rs" type="HashMap">
<result property="payamt" column="PAYAMT" />
<result property="reason" column="REASON" />
</resultMap>
<select id="procedureTest" parameterMap = "parameter_map" statementType="CALLABLE">
<![CDATA[
{
CALL [패키지명].[프로시저명]( ? )
}
]]>
</select>
클래스에서 해당 프로시저를 호출하는 함수를 작성하면,
---------------------------- 아래 에러 -----------------------------------
### Error querying database. Cause: org.apache.ibatis.reflection.ReflectionException: Could not set property 'p_result' of 'class java.lang.Class' with value '[{reason=3, payamt=1000}]' Cause: org.apache.ibatis.reflection.ReflectionException: There is no setter for property named 'p_result' in 'class java.lang.Class'
### The error may exist in mapper.xml
### The error may involve com.tnc.program.SlipToMIS2.parameter_map
### The error occurred while setting parameters
### SQL: { CALL [패키지명].[프로시저명](?) }
### Cause: org.apache.ibatis.reflection.ReflectionException: Could not set property 'p_result' of 'class java.lang.Class' with value '[{reason=3, payamt=1000}]' Cause: ....
------------------------------------------------------------------------------
p_result를 파라미터맵에서 세팅해줘도 setter가 없다고 뜨며, 프로시저 호출 결과 값은 에러창에 제대로 나오는 상황입니다.
해당 문제를 해결 할 수 있는 방법이 있다면 답변 부탁드립니다.
환경정보
-
- OS 정보 : ms window 10
- 표준프레임워크 버전 :
- JDK(JRE) 정보 : 1.8
- WAS 정보 :
- DB 정보 : 11g oracle
- 기타 환경 정보 : 이클립스 사용
A
안녕하세요.
표준프레임워크센터입니다.
Resultmap 는 Resultset 으로부터 어떻게 데이터를 뽑아낼지,
어떤 칼럼을 어떤 property로 매핑할지에 대해 정의합니다.
따라서 payamt 와 reason 이 프로시저 파라미터라면
Parametermap 에 아래와 같이 정의해주셔야 할것 같습니다.
<parameter property="payamt" javaType="java.lang.String" jdbcType="char" mode="IN" />
<parameter property="reason" javaType="java.lang.String" jdbcType="char" mode="IN" />
감사합니다.
표준프레임워크센터입니다.
Resultmap 는 Resultset 으로부터 어떻게 데이터를 뽑아낼지,
어떤 칼럼을 어떤 property로 매핑할지에 대해 정의합니다.
따라서 payamt 와 reason 이 프로시저 파라미터라면
Parametermap 에 아래와 같이 정의해주셔야 할것 같습니다.
<parameter property="payamt" javaType="java.lang.String" jdbcType="char" mode="IN" />
<parameter property="reason" javaType="java.lang.String" jdbcType="char" mode="IN" />
감사합니다.