Mybatis에서 Procedure 호출 시 Cursor 리턴.
- 작성자 :
- 이*********자
- 작성일 :
- 2019-06-13 23:18:05
- 조회수 :
- 4,450
- 구분 :
- 개발환경
- 진행상태 :
- 완료
Q
안녕하세요. 전자정부프레임워크를 공부하고 있는 개발자입니다.
다름이 아니고, Mybatis 에서 Procedure 호출을 하기 위한 공부중에 자꾸 막히는 부분이 있어서 글 남겨드립니다.
<parameterMap type="com.vo.UserVO" id="userVO">
<parameter property="userId" javaType="string" mode="IN"/>
<parameter property="password" javaType="string" mode="IN"/>
<parameter property="T_CURSOR" javaType="java.sql.ResultSet" jdbcType="CURSOR" mode="OUT" resultMap="resultHashmap"/>
</parameterMap>
로 파라미터 매퍼를 만들어두고 커서의 리절트 맵으로
<resultMap id="resultHashmap" type="java.util.HashMap"></resultMap>
이렇게 생성해 두었습니다.
그리고 프로시저를 호출하도록
<select id="getUserInfo" parameterMap="userVO" statementType="CALLABLE">
{call GETUSERINFO(?, ?, ?)}
</select>
를 작성하여 사용하고 있는데,
DEBUG [com.nexacro.uiadapter17.spring.core.view.NexacroView] - response platformdata=[variable=[
index=0 (ErrorCode, int, "-1")
, index=1 (ErrorMsg, string, "nested exception is org.apache.ibatis.reflection.ReflectionException: Could not set property 'T_CURSOR' of 'class com.vo.UserVO' with value '[{PASSWORD=admin, USER_ID=admin, USER_NAME=운영자}]' Cause: org.apache.ibatis.reflection.ReflectionException: There is no setter for property named 'T_CURSOR' in 'class com.vo.UserVO'")
]
]
이러한 오류가 뜨더라구요.
값을 가져오긴 했는데... 왜 세팅을 할 수 없다는건지.. 그래서 UserVO에 T_CURSOR를 List<HashMap<String, Object>> 타입으로 선언해서 getter와 setter를 설정해 줬더니. 이번에는 null값이 떠버리더라구요.
도움부탁드립니다,
다름이 아니고, Mybatis 에서 Procedure 호출을 하기 위한 공부중에 자꾸 막히는 부분이 있어서 글 남겨드립니다.
<parameterMap type="com.vo.UserVO" id="userVO">
<parameter property="userId" javaType="string" mode="IN"/>
<parameter property="password" javaType="string" mode="IN"/>
<parameter property="T_CURSOR" javaType="java.sql.ResultSet" jdbcType="CURSOR" mode="OUT" resultMap="resultHashmap"/>
</parameterMap>
로 파라미터 매퍼를 만들어두고 커서의 리절트 맵으로
<resultMap id="resultHashmap" type="java.util.HashMap"></resultMap>
이렇게 생성해 두었습니다.
그리고 프로시저를 호출하도록
<select id="getUserInfo" parameterMap="userVO" statementType="CALLABLE">
{call GETUSERINFO(?, ?, ?)}
</select>
를 작성하여 사용하고 있는데,
DEBUG [com.nexacro.uiadapter17.spring.core.view.NexacroView] - response platformdata=[variable=[
index=0 (ErrorCode, int, "-1")
, index=1 (ErrorMsg, string, "nested exception is org.apache.ibatis.reflection.ReflectionException: Could not set property 'T_CURSOR' of 'class com.vo.UserVO' with value '[{PASSWORD=admin, USER_ID=admin, USER_NAME=운영자}]' Cause: org.apache.ibatis.reflection.ReflectionException: There is no setter for property named 'T_CURSOR' in 'class com.vo.UserVO'")
]
]
이러한 오류가 뜨더라구요.
값을 가져오긴 했는데... 왜 세팅을 할 수 없다는건지.. 그래서 UserVO에 T_CURSOR를 List<HashMap<String, Object>> 타입으로 선언해서 getter와 setter를 설정해 줬더니. 이번에는 null값이 떠버리더라구요.
도움부탁드립니다,
A
안녕하세요.
표준프레임워크센터 입니다.
DB의 커서라는 것은
마이바티스를 사용하지 않을때
루프를 돌려 레코드셋을 얻을때 사용할수 있는 것입니다.
마이바티스가 결과를 리턴하는 시점에서는
커서가 반납되고 Connection의 종료되기 때문에
결과적으로 NULL로 될듯 합니다.
해당부분과 관련하여 결과 List를 받는 구조로 하셔야 할듯 합니다.
파라미터를 전달하여
마이바티스가 처리하여
결과적으로 LIst를 받는 방향으로 하셔야 할듯 하며
마이바티스트 처리해야 하는 커서등을 전달받는 것은
개발컨셉이 적절치 않은듯 합니다.
감사합니다.
표준프레임워크센터 입니다.
DB의 커서라는 것은
마이바티스를 사용하지 않을때
루프를 돌려 레코드셋을 얻을때 사용할수 있는 것입니다.
마이바티스가 결과를 리턴하는 시점에서는
커서가 반납되고 Connection의 종료되기 때문에
결과적으로 NULL로 될듯 합니다.
해당부분과 관련하여 결과 List를 받는 구조로 하셔야 할듯 합니다.
파라미터를 전달하여
마이바티스가 처리하여
결과적으로 LIst를 받는 방향으로 하셔야 할듯 하며
마이바티스트 처리해야 하는 커서등을 전달받는 것은
개발컨셉이 적절치 않은듯 합니다.
감사합니다.