JAVA

JAVA에서 프로시저(PROCEDURE) 결과값 받기 mabatis

쩨비 2021. 6. 9. 17:27
728x90
@Override
	public String test(String id) throws BizException {
		
		HashMap<String, Object> params = new HashMap<String, Object>();
		params.put("id", id);
		params.put("returnKey", "");
		 
		testMapper.callProcedure(params);

		String resultString = params.get("returnKey").toString();
		
		System.out.println("resultString : " + resultString);
		
		return resultString;
	}
<select id="callProcedure" statementType="CALLABLE" parameterType="HashMap">
	  {
	    CALL PACKAGE_NAME.PROCEDURE_NAME(
	      #{id				, mode=IN, jdbcType=VARCHAR}
	    , #{returnKey		, mode=OUT, jdbcType=VARCHAR}
	    )
	  }
  	</select>

JAVA 서비스 로직에서 PROCEDURE를 CALL 할때와 일반 sql문을 호출할때는 확연히 다른 방식으로 결과값을 RETURN 한다는 것을 명심해야 할것 같다.

 

sql은 mybatis를 사용한다.

 

SQL SELECT : SELECT 절의 컬럼값들을 ResultMap, Map에 담아 호출한 컬럼값 들을 호출한 서비스 혹은 DAO(MAPPER)로 리턴해준다.

 

SQL PROCEDURE : Map으로 프로시저에 파라미터를 전달한다. 주의 할점은 mode=OUT으로 받아야 할 값들도 Map에 put으로 만들어 줘야 한다는 거고 Call한 프로시저의 parameter 입력 순서를 DB에 설계된 순서대로 작성해주도록 하고 OUT으로 리턴 받을 값의 키값을 #{key, mode=OUT, jdbcType=VARCHAR} map에 리턴받을려고 put 해둔 key값과 동일하게 작성한다. 그러면 호출한 서비스로 리턴하는게 아니라 호출할때 전달한 Map에 담아주어 따로 리턴을 해주지 않아도 그 Map에서 사용 가능하다.

 

 

728x90