Jaeyoung Kim
나의 개발 공부 일지
Jaeyoung Kim
전체 방문자
오늘
어제
  • 분류 전체보기 (77)
    • WIL👨‍🏫 (16)
    • 🤖Algorithm (29)
    • 🖥CS (20)
      • 기술면접대비🔎 (10)
    • ✍️개발로그 (10)

블로그 메뉴

  • 홈
  • 방명록
  • 글쓰기
  • 설정

공지사항

인기 글

태그

  • Java
  • 항해99
  • 트랜잭션
  • 백준
  • SQLD
  • WIL
  • querydsl
  • 데이터자료구조
  • 자바
  • transaction
  • API
  • 개발로그
  • til
  • 회고록
  • rest
  • N-gram parser
  • HTTP
  • 백준2920
  • 프로그래머스
  • sql

최근 댓글

최근 글

티스토리

250x250
hELLO · Designed By 정상우.
Jaeyoung Kim

나의 개발 공부 일지

✍️개발로그

220829_실전프로젝트 4일차

2022. 8. 29. 22:10
728x90

이번 실전 프로젝트에서 우리 조가 만들려하는 서비스는 간단하게 설명하여 당근 마켓을 레퍼런스로 한 반려동물 용품 중고 거래 사이트다. 금주 내가 구현해야하는 부분은 상품 CRUD와 검색 기능이다. 글로 적어놓으니 몇 안되어보이지만 실전인 만큼 여러 디테일을 챙겨야하기에 신경써야하는 부분들이 상당하였다. 그 중 단일 상품 조회 메소드를 사용하면 조회수가 올라가게끔하는 기능을 추가로 구현할 필요가 있었다. 처음 시도하는 부분이었기에 기록을 남겨보려한다.

 

Item
//Item Entity Class

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

먼저 조회수를 할당할 필드를 생성해주었다.  nullable은 false로 설정해두었으며 default 값은 정수 0으로 설정해주었다.

 

ItemRepository
public interface ItemRepository extends JpaRepository<Item, Long> {

    @Modifying
    @Query("update Item i set i.viewCnt = i.viewCnt + 1 where i.id = :id")   
    int addViewCnt(Long id);
}

처음 써보는 query였기에 마냥 어렵기만했지만 동료들의 도움으로 많이 배울 수 있었다.

Modifying은
조회를 제외한 Insert(삽입) / Update(수정) / Delete(삭제) 쿼리 사용 시 필요한 어노테이션이다.

@Query의 내용을 살펴보면
update(DB Query Update - 수정)
Item(Item Entity) i(item), set(불러온다)
viewCnt(Item Entity Field viewCnt)
where(DB Table에서 어떤 item인가?)
i.id = :id(item의 PK 값이 파라미터값으로 받아오는 id와 같은 item)

 

ItemService
//ItemService
    
    public int addViewCnt(Long itemId) {
        return itemRepository.addViewCnt(itemId);
    }

 

ItemController

 

// ItemController

    @GetMapping("items/detail/{itemId}")
    public ResponseEntity<?> getItem(@PathVariable Long itemId) {
        ItemResponseDto itemResponseDto = itemService.getItem(itemId);
        itemService.addViewCnt(itemId);
        return ResponseEntity.ok().body(itemResponseDto);
    }

 

 

Controller 단에서 조회수를 증가시키려하는 Method 내부에 addViewCnt Method가 먼저 실행되도록 코드를 추가하였다.

 

Reference

 

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

게시판에 조회수 기능을 추가해보자. 기능구현은 생각보다 간단했다. 1. Posts @NoArgsConstructor @AllArgsConstructor @Builder @Getter @Entity public class Posts extends TimeEntity { @Id @GeneratedValue(..

dev-coco.tistory.com

 

728x90

'✍️개발로그' 카테고리의 다른 글

20220909_실전 프로젝트 14일차(Swagger 도입)  (0) 2022.09.09
220830_실전프로젝트 8일차(feat.Item 수정부분 트러블슈팅🚀)  (0) 2022.09.03
20220823_클론코딩(항해인사이드) 5일차  (0) 2022.08.23
20220820_클론코딩(항해인사이드) 2일차  (0) 2022.08.20
20220726_개발로그(2)_특정게시글 조회(feat.Repository Method)  (0) 2022.07.26
    '✍️개발로그' 카테고리의 다른 글
    • 20220909_실전 프로젝트 14일차(Swagger 도입)
    • 220830_실전프로젝트 8일차(feat.Item 수정부분 트러블슈팅🚀)
    • 20220823_클론코딩(항해인사이드) 5일차
    • 20220820_클론코딩(항해인사이드) 2일차
    Jaeyoung Kim
    Jaeyoung Kim
    보다 안정적인 코드 구현을 꿈꾸는 백엔드 개발자 지망생

    티스토리툴바