Spring Framework

[Spring] 스프링 SimpleJdbcCall 이용하여 프로시저 호출해서 out 파라미터 얻기

도로락 2020. 1. 6. 23:39
스프링 SimpleJdbcCall 이용하여 프로시저 호출해서 out 파라미터 얻기
SimpleJdbcCall을 이용하면 프로시저 호출을 간단하게 할 수 있습니다.

만약 MS-SQL을 기준으로 dbo.sp_get_user_info라는 프로시저의 파라미터가 다음과 같이 있다고 가정했을때 이 프로시저는 두개의 입력 파라미터를 받아 두개의 출력 파라미터에 결과를 리턴합니다.
dbo.sp_get_user_info
@UserNo varchar(10) IN,
@Name varchar(10) IN,
@Age int OUT,
@Grade varchar(10) OUT
cs


대략적인 코드는 다음과 같습니다. SimpleJdbcCalljava.sql.DataSource객체를 의존하므로 생성시 주입해주어야 합니다.
public class UserService {
 
    @Autowired
    public DataSource dataSource;
 
    public void printUserInfo() {
        String userNo = "7";
        String name = "kim";
 
        Map<String, Object> paramMap = new HashMap<>();
        paramMap.put("UserNo", userNo);
        paramMap.put("Name", name);
 
        SimpleJdbcCall jdbcCall = new SimpleJdbcCall(dataSource);
        jdbcCall.withSchemaName("dbo");
        jdbcCall.withProcedureName("sp_get_user_info");
        Map<String, Object> result = null;
 
        try {
            result = jdbcCall.execute(paramMap);
        } catch (UncategorizedSQLException e) {
            throw new BadRequestException(e.getMessage());
        }
 
        System.out.println((int) result.get("Age"));
        System.out.println((String) result.get("Grade"));
    }
}
cs


입력 파라미터는 java.util.Map 타입으로 key를 프로시저의 입력(IN) 파라미터명으로 하여 설정하고 프로시저를 호출할때 넘깁니다. 프로시저 호출 결과가 정상적으로 처리되어 리턴된다면 결과 역시  java.util.Map 타입으로 리턴됩니다.
result = jdbcCall.execute(paramMap);
cs


출력(OUT) 파라미터는 execute() 메서드를 실행한 결과 Map에서 파라미터명을 key로 하여 얻을 수 있습니다.
System.out.println((int)result.get("Age"));
System.out.println((String)result.get("Grade"));
cs