본문 바로가기

STUDY/Spring

Spring | JDBCTemplate 사용하기

JPA와 QueryDsl 사용 중.. FROM절 서브쿼리 조인이 필요해서 부득이하게 JdbcTemplate을 함께 사용하게 됐다.
오랜만에 사용하니까 어려워서 정리해본다..

RowMapper

RowMapper 인터페이스를 구현하면 쿼리 실행 결과를 바로 POJO 객체에 매핑시킬 수 있다.

@AllArgsConstructor
@Getter
public class AnimalResponseDto {

    private String name;
    private String breed;
    private int age;
}

매핑시킬 코드를 작성한 후 사용하면 끝!!

public class AnimalRowMapper implements RowMapper<AnimalResponseDto> {

    @Override
    public AnimalResponseDto mapRow(ResultSet rs, int rowNum) throws SQLException {
        return new AnimalResponseDto(rs.getString("NAME"), rs.getString("BREED"), rs.getInt("AGE"));
    }
}

참고로 RowMapperorg.springframework.jdbc.core.RowMapper경로다. swing어쩌구 넣지말기..

queryForStream

이런식으로 사용한다. 첫 번째 인자값으로는 문자열로 작성한 SQL을 넣고, 두 번째는 앞서 작성한 row mapper를 넣는다.
그러면 stream형식의 결과값이 반환된다.
파라미터를 사용해야 하면 세 번째 인자값으로 파라미터들을 넣으면 된다.

jdbcTemplate.queryForStream(sql, new AnimalRowMapper());

동적 WHERE절..

동적으로 파라미터가 있을 때만 WHERE절을 추가하도록 만들어보자..
WHERE 1=1은 절대 쓰고싶지 않으니까~!

private String getConditions(SearchParams params) {

    List<String> conditions = new ArrayList()<>;

    if(params.getName() != null && !params.equals("")) {
        conditions.add("NAME LIKE \'%" + params.getName() + "%\' ");
    }
    // ..생략

    if(conditions != null || conditioins.isEmpty()) {
        return "";
    } else {
        return "WHERE " + String.join(" AND", conditions);
    }
}

이미 WHERE 절이 있으면 return " AND " + String.join(" AND", conditions);로 변경해주자..