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 |