JdbcTemplate를 이용한 데이터 통신

2024. 9. 19. 11:27· BE/Spring
반응형

환경) 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
'BE/Spring' 카테고리의 다른 글
  • [Spring Security] JSON으로 로그인 및 응답하기
  • [Spring] Inteceptor prehandle 에서 response 넘기는 방법
  • [Spring Security] React(Front)와 Spring Security 설정 방법
  • [Spring Security] JWT - 4. JWT 로그인 및 권한 처리
멍목
멍목
개발 관련 새롭게 알게 된 지식이나 좋은 정보들을 메모하는 공간입니다.
반응형
멍목
김멍목의 개발블로그
멍목
전체
오늘
어제
  • 분류 전체보기 (514)
    • BE (190)
      • Spring (21)
      • Java (141)
      • Kotlin (6)
      • JPA (22)
    • FE (33)
      • Javascript (16)
      • Typescript (0)
      • React (5)
      • Vue.js (9)
      • JSP & JSTL (3)
    • DB (32)
      • Oracle (22)
      • MongoDB (10)
    • Algorithm (195)
    • Linux (8)
    • Git (6)
    • etc (42)
    • ---------------------------.. (0)
    • 회계 (4)
      • 전산회계 2급 (4)
    • 잡동사니 (2)

블로그 메뉴

  • 홈
  • 관리

공지사항

인기 글

태그

  • 코테공부
  • 자기 개발
  • Effective Java
  • 코틀린
  • 자기 공부
  • 자바 공부
  • 알고리즘공부
  • 더 자바 애플리케이션을 테스트하는 다양한 방법
  • 자바 개발자를 위한 코틀린 입문
  • 자기개발
  • MongoDB 기초부터 실무까지
  • 이펙티브 자바
  • 알고리즘 공부
  • JPA
  • 자바 테스팅 프레임워크
  • 전산회계 2급 준비
  • 자기공부
  • JPA 공부
  • MongoDB 공부
  • 프로젝트로 배우는 Vue.js 3
  • MongoDB with Node.js
  • Java to Kotlin
  • 더 자바 Java 8
  • 이펙티브자바
  • junit5
  • java 8
  • Oracle
  • 코테 공부
  • 자바공부
  • vue3 공부

최근 댓글

최근 글

hELLO · Designed By 정상우.v4.2.0
멍목
JdbcTemplate를 이용한 데이터 통신
상단으로

티스토리툴바

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.