반응형
환경) H2 DB
1. INSERT(UPDATE)
update(query, ...) 를 사용하는 경우 추가된 행의 갯수를 반환받을 수 있다.
@Override
public int insert(ReviewDto dto) {
int result = jdbcTemplate.update(
"INSERT INTO REVIEWS (SEQ, USER_SEQ, PRODUCT_SEQ, CONTENT, CREATE_AT) VALUES (null, ?, ?, ?, null)",
dto.getUserSeq(), dto.getProductId(), dto.getContent()
);
return result;
}
2. SELECT
- 쿼리를 통해 얻은 데이터 결과값을 dto, vo로 변환해주는 작업이 필요하다.
- 이 작업을 RowMapper라는 객체를 이용해서 할 수 있다.
// Lambda Expression
static RowMapper<Product> mapper = (rs, rowNum) ->
new Product.Builder()
.seq(rs.getLong("seq"))
.name(rs.getString("name"))
.details(rs.getString("details"))
.reviewCount(rs.getInt("review_count"))
.createAt(dateTimeOf(rs.getTimestamp("create_at")))
.build();
// Anonymous Expression
static RowMapper<OrderDto> mapper = new RowMapper<OrderDto>() {
@Override
public OrderDto mapRow(ResultSet rs, int rowNum) throws SQLException {
ReviewDto reviewDto = null;
if((rs.getLong("review_seq") != 0)){
reviewDto = new ReviewDto(rs.getLong("review_seq"), rs.getLong("review_product_seq"), rs.getString("review_content"), dateTimeOf(rs.getTimestamp("review_create_at")) );
}
return new OrderDto(rs.getLong("seq"), rs.getLong("user_seq"), rs.getLong("product_seq"),
reviewDto, State.valueOf(rs.getString("state")), rs.getString("request_msg"), rs.getString("reject_msg"), dateTimeOf(rs.getTimestamp("completed_at")), dateTimeOf(rs.getTimestamp("rejected_at")), dateTimeOf(rs.getTimestamp("create_at")));
}
};
단건 조회
- null이 반환될 수 있으므로, Optional로 반환한다.
- mapper는 RowMapper이며, id는 Parameter 이다.
@Override
public Optional<Product> findById(long id) {
List<Product> results = jdbcTemplate.query(
"SELECT * FROM products WHERE seq=?",
mapper,
id
);
return ofNullable(results.isEmpty() ? null : results.get(0));
}
다건 조회
- 다건을 조회하는 경우, LIst로 반환한다.
- 아래의 예제에는 페이징, join이 포함되어 있다.
@Override
public List<OrderDto> findAll(Pageable simplePageRequest) {
return jdbcTemplate.query(
"SELECT o.*, r.product_seq as review_product_seq, r.content as review_content, r.create_at as review_create_at FROM orders o left outer join reviews r on o.review_seq = r.seq ORDER BY o.seq DESC limit ? offset ?",
mapper, simplePageRequest.getSize(), simplePageRequest.getOffset()
);
}
반응형
'BE > Spring' 카테고리의 다른 글
[Spring Security] JSON으로 로그인 및 응답하기 (0) | 2023.12.10 |
---|---|
[Spring] Inteceptor prehandle 에서 response 넘기는 방법 (0) | 2023.04.06 |
[Spring Security] React(Front)와 Spring Security 설정 방법 (2) | 2022.07.19 |
[Spring Security] JWT - 4. JWT 로그인 및 권한 처리 (0) | 2022.06.19 |
[Spring Security] JWT - 3. JWT 임시 토큰 테스트 및 로그인 시 토큰 생성 (0) | 2022.06.18 |