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"));
}
}
참고로
RowMapper
는org.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);
로 변경해주자..
'STUDY > Spring' 카테고리의 다른 글
Spring Boot | Request 마다 로그 찍기 (0) | 2022.01.21 |
---|---|
Spring Boot | war 빌드, 외부 톰캣 사용 (WAS에 배포하기) (0) | 2021.11.22 |
JPA | @Converter, @Convert (+ @Convert 먹히지 않을 때) (0) | 2021.11.01 |
Spring Boot | SMTP (worksmobile 메일) (0) | 2021.10.22 |
Spring Boot | RestTemplate PATCH 사용하기 (0) | 2021.10.19 |