모눈종이에 사각사각

프로시저 호출하기 - SimpleJdbcCall 본문

Spring

프로시저 호출하기 - SimpleJdbcCall

모눈종이씨 2022. 4. 11. 12:00

프로젝트 진행 중에 가게의 다음 영업시간을 알아내기 위해서 프로시저를 만들었었다.

이를 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
Comments