프로시저에서 받아온 리턴값에 따라 애플리케이션 로직을 각각 다르게 태우려고 하는데..
프로시저 수행 후 해당 리턴값을 어떻게 받아오는지 잘 몰랐던 터라 간단하게 정리하고자 한다.
mybatis 내에 해당 프로시저를 호출하는 문을 select 태그로 바꾸고
리턴값을 resultType 에 지정된 해시맵에 담는 방법으로 구현했다.
(2022-07-29 수정 : 근데 꼭 태그가 select가 아니더라도 동작은 된다.
그래서 insert 태그로 바꿔서 작업했다.)
<select id="callProcRtnTest" statementType="CALLABLE" resultType="hashmap">
CALL YUHATEST.PROC_RTN_TEST (
#{input_val_a, mode=IN, jdbcType=VARCHAR}
,#{input_val_b, mode=IN, jdbcType=VARCHAR}
,#{outpout_val_c, mode=OUT, jdbcType=VARCHAR}
,#{outpout_val_d, mode=OUT, jdbcType=VARCHAR}
)
</select>
import java.util.Map;
import org.springframework.stereotype.Repository;
...
void callProcRtnTest(Map<String, Object> parameterMap);
Map<String, Object> testMap = new HashMap<String, Object>();
testMap.put("input_val_a", "aa");
testMap.put("input_val_b", "bb");
testMap.put("output_val_c", "");
testMap.put("output_val_c", "");
TestRtnDao.callProcRtnTest(testMap);
// 리턴값 추출
if( testMap.get("output_val_c") != null && !"".equals(testMap.get("output_val_c").toString()) ){
// 원하는 로직 태우기
}