[java] procedure 리턴값 mybatis 에서 받기

Yu River·2022년 7월 27일
0

procedure 리턴값 mybatis 에서 받기

프로시저에서 받아온 리턴값에 따라 애플리케이션 로직을 각각 다르게 태우려고 하는데..
프로시저 수행 후 해당 리턴값을 어떻게 받아오는지 잘 몰랐던 터라 간단하게 정리하고자 한다.

구현 요약

mybatis 내에 해당 프로시저를 호출하는 문을 select 태그로 바꾸고
리턴값을 resultType 에 지정된 해시맵에 담는 방법으로 구현했다.

(2022-07-29 수정 : 근데 꼭 태그가 select가 아니더라도 동작은 된다.
그래서 insert 태그로 바꿔서 작업했다.)

1) 프로시저 호출 쿼리 작성

TestRtnMapper.xml

	<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>

2) Dao 인터페이스 내 선언

TestRtnDao.java

import java.util.Map;
import org.springframework.stereotype.Repository;

...

void callProcRtnTest(Map<String, Object> parameterMap);

3) ServiceImpl 내 호출 및 리턴값 추출

TestRtnServiceImpl.java


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()) ){
     // 원하는 로직 태우기
}
profile
도광양회(韜光養晦) ‘빛을 감추고 어둠속에서 힘을 기른다’

0개의 댓글