슬기로운 개발생활

Spring Boot JPA 게시판 조회수 기능 추가

by coco3o
반응형

게시판에 조회수 기능을 추가해보자. 기능구현은 생각보다 간단했다.

1. Posts

@NoArgsConstructor
@AllArgsConstructor
@Builder
@Getter
@Entity
public class Posts extends TimeEntity {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @Column(length = 500, nullable = false)
    private String title;

    @Column(columnDefinition = "TEXT", nullable = false)
    private String content;

    @Column(nullable = false)
    private String writer;

    @Column(columnDefinition = "integer default 0", nullable = false)
    private int view;
}

2. Repository

public interface PostsRepository extends JpaRepository<Posts, Long> {
    ...
    @Modifying
    @Query("update Posts p set p.view = p.view + 1 where p.id = :id")
    int updateView(Long id);
}

@Modifying 어노테이션은 @Query 어노테이션에서 작성된 조회를 제외한 데이터의 변경이 있는
삽입(Insert), 수정(Update), 삭제(Delete) 쿼리 사용시 필요한 어노테이션이다.


3. Service

    /* Views Counting */
    @Transactional
    public int updateView(Long id) {
        return postsRepository.updateView(id);
    }

4. Controller

    @GetMapping("/posts/read/{id}")
    public String read(@PathVariable Long id, Model model) {
        PostsResponseDto dto = postsService.findById(id);
        postsService.updateView(id); // views ++
        model.addAttribute("posts", dto);

        return "posts-read";
    }

5. 적용

조회수 증가가 잘 적용 되었다.
우선 이정도로 하고, 나중에 쿠키나 세션을 이용해 조회수 중복 카운트를 방지하는 기능을 구현해볼까 한다.

반응형

블로그의 정보

슬기로운 개발생활

coco3o

활동하기