📕🐘 도로락 - 코끼리를 냉장고에 넣는 방법
Spring Framework | 2020. 1. 6. 23:39

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

스프링 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

대략적인 코드는 다음과 같습니다. 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"));
    }
}

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

result = jdbcCall.execute(paramMap);

출력(OUT) 파라미터는 execute() 메서드를 실행한 결과 Map에서 파라미터명을 key로 하여 얻을 수 있습니다.

System.out.println((int)result.get("Age"));
System.out.println((String)result.get("Grade"));
도로락

도로락

Writer

IT, 프로그래밍, 컴퓨터 활용 정보 등을 위한 블로그