스프링 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 |
대략적인 코드는 다음과 같습니다.
SimpleJdbcCall
은 java.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 |