당니의 개발자 스토리
상품 리포지토리 개발 본문
상품 리포지토리 개발
여러분 이번 시간에는 상품 리포지토리를 한번 개발해 보겠습니다.

이렇게 ItemRepository를 만드시구요.

당연히 @Repository 어노테이션을 넣고, @RequiredArgsConstructor를 넣기로 했죠.

그 다음에 private final 해가지고 엔티티 매니저, Spring Data JPA가 주입해준다고 말씀드렸죠. 아마 미래에는 꼭 Spring Data JPA가 아니라 Spring이 기본적으로 이거를 해줄 거에요. @PersistenceContext 대신에 @Autowired로 할 수 있도록 해줄 거에요.
자 이제 쭉 개발해 볼게요.
먼저 상품 저장해야 되겠죠.

그래서 save를 해야 되고 여기서 만약에 item.getId()가 null이면 em.persist 해서 item을 저장할 거예요.

처음에는 이 item이 id가 없기 때문이죠. 데이터를 저장할 때는.
그래서 jpa가 제공하는 persist 라는 것을 쓸 거고요.

만약 그게 아니면 em.merge 라는 것을 쓸 거에요.

merge는 업데이트 비슷한 건데 자세한 것은 뒤에서 설명을 따로 해드릴게요. 웹 애플리케이션 쪽에다가 아예 제가 챕터를 하나 만들었어요.
지금은 그냥 어떻게 생각하시면 되냐면 JPA를 잘 아시는 분들은 이거에 대해서 명확하게 아시겠지만, item은 JPA에 저장하기 전까지 id 값이 없거든요. Id 값이 없다는 거는 무슨 뜻이냐면, 완전히 새로 생성한 객체라는 거예요. 그래서 이거는 save를 호출하면 Id 값이 당연히 null일 거고 결국 em.persist로 item을 완전히 신규로 등록하는 거다. 라고 가정을 하시면 되고요. 만약에 '어? item에 id 값이 있네?' 이건 뭐냐면 이미 db에 등록된 걸 어디서 가져온 거예요. 그래서 여기서의 save, merge는 update 라고 이해해주시면 됩니다. 물론 진짜 업데이트는 아닌데 그거랑 비슷하다고 보시면 됩니다. 자세한 것은 뒤에 웹 어플리케이션을 개발하는 데서 설명해 드릴게요.
자 지금은 그냥 save, 또는 업데이트 라고 이해해주시면 됩니다.
그 다음에 item을 하나 조회하는 것은

이렇게 하면 됩니다.
그 다음에 findAll() 같은 경우에는, 단 건 찾는 거야 저렇게 엔티티 메니저의 find를 쓰면 되지만 여러 개 찾는 것은 jpql을 작성해야 되죠.

이렇게 만들면 끝이 납니다. 여기에 대해서는 더 이상 특별한 게 없죠.
자 이렇게 하면 상품 리포지토리 개발이 끝납니다.

아까 설명드렸다시피, Id를 저장할 때 말씀드린대로 Id가 없으면 새 걸로 보고 persist로 호출하고 Id가 있으면 이미 JPA를 통해서 DB에 한번 들어간 거구나. 라고 가정을 하고 merge 라는 걸 써서 강제로 업데이트 하는 거라고 보시면 될 것 같구요. 이정도 설명드리면 되겠네요.
'스프링 > 실전! 스프링 부트와 JPA 활용1' 카테고리의 다른 글
| 주문, 주문상품 엔티티 개발 (0) | 2024.05.03 |
|---|---|
| 상품 서비스 개발 (0) | 2024.04.29 |
| 상품 엔티티 개발(비즈니스 로직 추가) (0) | 2024.04.29 |
| 회원 기능 테스트 (0) | 2024.04.27 |
| 회원 서비스 개발 (0) | 2024.04.24 |