모눈종이에 사각사각
프로시저 호출하기 - SimpleJdbcCall 본문
프로젝트 진행 중에 가게의 다음 영업시간을 알아내기 위해서 프로시저를 만들었었다.
이를 JDBC 템플릿에서 어떻게 호출하는 지 몰라 공부하면서 구현했기 때문에 복습 겸 적어보려고 한다.
이번 포스팅에서는 MySQL에서 작성한 프로시저를 SimpleJdbcCall을 사용하여 어떻게 호출하지 알아 볼 것이다.
SimpleJdbcCall을 이용하면 프로시저 호출을 할 수 있다.
1. 호출할 프로시저 지정
먼저 호출할프로시저를 지정한다.
내가 작성한 프로시저의 이름은 'business_hours_loop' 이다.
// 프로시저 지정
SimpleJdbcCall simpleJdbcCall = new SimpleJdbcCall(jdbcTemplate)
.withProcedureName("business_hours_loop");
2. 프로시저 호출
그리고 프로시저를 호출한다. 내가 만든 프로시저의 경우에는 storeIdx를 인자로 주어야 했다.
결과는 Map으로 받는다.
// 프로시저 호출
Map simpleJdbcCallResult = simpleJdbcCall.execute(storeIdx);
System.out.println(">>"+simpleJdbcCallResult);
반환된 결과를 출력해보면 다음과 같다.
>>{#result-set-1=[{nextBusinessHours=오늘 오전 10:00 오픈}], #update-count-1=0}
여기에서 nextBusinessHours에 해당하는 값을 추출해야 한다.
3. 결과값 추출
// 프로시저 호출 결과에서 nextBusinessHours 추출
ArrayList arrayList = new ArrayList();
arrayList = (ArrayList) simpleJdbcCallResult.get("#result-set-1");
Map resultMap = (Map) arrayList.get(0);
System.out.println("nextBusinessHours: " + resultMap.get("nextBusinessHours"));
위와 같이 결과값을 추출한 후 출력해보면
nextBusinessHours: 오늘 오전 10:00 오픈
다음과 같이 잘 나온다.
그리고 String 변수에 저장해 준 뒤 반환해주면 끝!
전체 코드는 다음과 같다.
// StoreDao.java
public class StoreDao {
private JdbcTemplate jdbcTemplate;
@Autowired
public void setDataSource(DataSource dataSource){
this.jdbcTemplate = new JdbcTemplate(dataSource);
}
public String getBusinessHours(int storeIdx){
// 프로시저 지정
SimpleJdbcCall simpleJdbcCall = new SimpleJdbcCall(jdbcTemplate)
.withProcedureName("business_hours_loop");
// 프로시저 호출
Map simpleJdbcCallResult = simpleJdbcCall.execute(storeIdx);
System.out.println(">>"+simpleJdbcCallResult);
// 프로시저 호출 결과에서 nextBusinessHours 추출
ArrayList arrayList = new ArrayList();
arrayList = (ArrayList) simpleJdbcCallResult.get("#result-set-1");
Map resultMap = (Map) arrayList.get(0);
// nextBusinessHours에 저장
String nextBusinessHours = (String) resultMap.get("nextBusinessHours");
return nextBusinessHours;
}
}
참고사이트
https://stackoverflow.com/questions/54802060/how-to-get-values-from-result-set-1-in-simplejdbccall
https://docs.spring.io/spring-framework/docs/2.5.x/reference/jdbc.html
https://stackoverflow.com/questions/9361538/spring-jdbc-template-for-calling-stored-procedures
'Spring' 카테고리의 다른 글
[Spring] No serializer found for class ~~~... (0) | 2023.01.23 |
---|