goblin
리니팅
goblin

공지사항

전체 방문자
오늘
어제
  • 분류 전체보기 (75)
    • 개발 (31)
      • Spring (12)
      • JPA (4)
      • JAVA (4)
      • Python (6)
      • Docker (1)
      • Error (3)
      • Spring Cloud로 개발하는 MSA (1)
    • 알고리즘 (32)
    • 자료구조 (3)
    • 컴퓨터 개론 (3)
    • 개인 프로젝트 (4)
      • 쇼핑몰 만들기 (4)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

인기 글

태그

  • springboot
  • python
  • BOJ
  • inflearn
  • 클래스
  • 동적계획법
  • 자료구조
  • 조합
  • 코딩테스트
  • 알고리즘
  • 스프링
  • 다이나믹 프로그래밍
  • 파워자바
  • 객체
  • dp
  • 백준
  • tdd
  • Spring
  • gradle
  • JPA
  • 프로그래머스
  • 코딩테스트연습
  • Intellij
  • sorting
  • 스프링부트
  • 문자열
  • 파이썬
  • 정렬
  • 구현
  • 다이나믹프로그래밍

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
goblin

리니팅

Spring Boot + JPA 게시물 조회수 기능
개발/Spring

Spring Boot + JPA 게시물 조회수 기능

2022. 1. 14. 16:44
728x90

팀원들과 회의 중 조회수 기능을 추가하면 좋을 것 같아서 조회수 기능을 추가해봤다.

 

수정 사항은 다음과 같다.

 

1. Domain에 view 컬럼 추가

 

2. BoardRepository

public interface BoardRepository extends JpaRepository<Board, Long> {

    @Modifying
    @Query("update Board b set b.view = b.view+1 where b.id=:id")
    int updateView(Long id);
}

 

@Query 

Spring JPA를 다루다보면 쿼리를 직접 정의하여 사용할 경우가 존재한다.

원래는 JPA를 쓰지 않아 xml 파일에 쿼리를 작성했는데 JPA를 사용하는 경우 @Query 어노테이션을 이용해 정의할 수 있다.

단, @Query 어노테이션에 정의되는 필드명은 테이블이 아닌 Entity 클래스와 Entity 속성 (Domain)이름이다!

 

@Modifying 

@Modifying은 @Query 어노테이션으로 작성된 조회를 제외한 데이터에 변경이 일어나는 삽입(insert), 수정(update), 삭제(delete) 쿼리 메서드를 사용할 때 필요하다.

 

3. Service

/* 조회수 카운트 */
@Transactional
public int updateView(Long id){
    return boardRepository.updateView(id);
}

@Transactional

트랜잭션이란 데이터베이스의 상태를 변경하는 작업 또는 한번에 수행되어야 하는 연산들을 의미한다.

DB와 관련된, 트랜잭션이 필요한 서비스 클래스 혹은 메서드에 사용한다.

이 어노테이션이 붙은 메서드는 메서드가 포함하고 있는 작업 중에 하나라도 실패할 경우 전체 작업을 취소한다.

 

4. Controller

@GetMapping("/api/boards/{id}")
public Board getBoard(@PathVariable Long id){
    Optional<Board> board = boardRepository.findById(id);
    boardService.updateView(id);
    return board.get();
}

 

5. 실행화면

먼저 ARC를 통해 게시물을 하나 만든다. (POSTMAN도 가능)

view가 0인 것을 확인할 수 있다.

 

게시물 조회시 view가 잘 카운트 되는 것을 확인했다.

728x90
반응형

'개발 > Spring' 카테고리의 다른 글

[SpringBoot] 인텔리제이로 스프링 부트 시작하기  (0) 2022.05.16
Spring Boot Validation  (0) 2022.02.05
GET API  (0) 2022.01.14
[Spring Boot] REST API ( HELLO WORLD! ) 구현  (0) 2021.12.30
웹 개론  (0) 2021.12.27
    '개발/Spring' 카테고리의 다른 글
    • Spring Boot Validation
    • GET API
    • [Spring Boot] REST API ( HELLO WORLD! ) 구현
    • 웹 개론
    goblin
    goblin

    티스토리툴바