자기계발/활동&해커톤&코테후기

[spring][2022고대해커톤]SQL이 맞는데 안될때(ft. 여러개 조회 List)

개발자 덕구🐾 2022. 8. 20. 21:57
728x90

 

 

시간이 급박한 해커톤에서 계~속 SQL이  분명이 맞는데 조회가 제대로 작동되지않았다. 

그만하고 싶었지만 어쩔수없기에 계속 봤다. 

 

그러다가 그냥 작은 것부터 돌려보자 싶어 select하는 필드중에 몇개만 골라 새로 res를 만들고 코드를 수정하기 시작했다. 

예전에 작성해놓은 코드를 보며 갑자기 다른 점이 보였다. 

 

 

 

 

 

그것은 바로 List였다. 

 

 

 

 

 

 

여러개를 조회할 때는 List로 조회해야하는데 이걸 잊어버렸던 것이다!!

막상 생각이 떠오르니 과거에 이렇게 만들었었다는 것이 떠올랐다.

 

그래서 바로 

 

 

 

@Getter
@Setter
@AllArgsConstructor
public class GetReservationListRes {
    private List<GetReservationRes> reservationList;
}

 

reservation의 List 형태를 저장하기 위해 GetReservationListRes를 만들어주었다. 

 

controller를 GetReservationListRes로 변경해주고 

 

provider에서는 

 

public GetReservationListRes getReservationList(int userIdx) throws BaseException {
        try {
            List<GetReservationRes> reservationList = reservationDao.getReservationList(userIdx);
            GetReservationListRes getReservationListRes = new GetReservationListRes(reservationList);
            return getReservationListRes;
        } catch (Exception exception) {
            // 에러가 발생하였다면 : 5006 : DataBase Error입니다.
            throw new BaseException(DATABASE_ERROR);
        }
    }

이렇게 GetReservationListRes는 반환형으로 하되 Dao에서 받은 List를 new로 GetReservationListRes를 만들어준다. 

 

 

 

 

 

 

 

Dao에서는 

public List<GetReservationRes> getReservationList(int userIdx) {
        int paramUserIdx = userIdx;
        String getReservationQuery = "select p.placeName,r.reservationStartTime,r.reservationEndTime, r.headCount " +
                "from UserReservation ur, Place p, Reservation r " +
                "where userIdx = ? and ur.reservationIdx = r.reservationIdx and p.placeIdx = r.placeIdx";

        return this.jdbcTemplate.query(getReservationQuery,
                (rs, rowNum) -> new GetReservationRes(
                        rs.getString("placeName"),
                        rs.getString("reservationStartTime"),
                        rs.getString("reservationEndTime"),
                        rs.getInt("headCount")),paramUserIdx);

    }

 

얼렁뚱땅 쓴 쿼리문과 

return에는 하나의 객체(Object) 결과 값이 나올 때 사용하는 메소드인 queryForObject가 아니라 

List 형태로 반환하는 query를 사용하여 return 한다. 

 

 

 

 

 

 

행복한 삽질일기:)^^^^^

 

 

반응형