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 |