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
'JAVA' 카테고리의 다른 글
2-2 OOP의 특징 (추상화, 캡슐화, 상속, 다형성) (1) | 2021.08.25 |
---|---|
2-1. OOP란? (0) | 2021.08.25 |
1-2. API - REST API를 간단하게 구현해보자 (0) | 2021.08.23 |
1-1. API - API란? (0) | 2021.08.05 |
containsKey (리스트의 특정 컬럼으로 그룹핑 맵퍼를 만들자) (0) | 2021.04.17 |