스프링데이터 + JPA 112

5. 조회용 샘플 데이터 입력

이렇게 두 건의 주문을 만들거임 @Component @RequiredArgsConstructor public class InitDb { private final InitService initService; @PostConstruct public void init(){ initService.dbInit1(); initService.dbInit2(); } @Component @Transactional @RequiredArgsConstructor static class InitService{ private final EntityManager em; public void dbInit1(){ Member member = createMember("userA", "서울", "1","1111"); em.persist(..

4. API 성능 최적화

지연 로딩과 조회 성능 최적화 컬렉션 조회 최적화 페이징과 한계 돌파 OSIV와 성능 최적화 보통 이 범주안에 문제가 있음. CRUD는 문제 대부분이 조회임. 사람들이 조회도 많이 하고 insert같은 건 쉽기 때문 지연로딩과 조회 성능 최적화 n+1문제, 쿼리 하나면 될게 여러 개 나가는 문제를 해결 컬렉션 조회 최적화 연관관계가 있는 컬렉션 조회 최적화 페이징과 한계 돌파 member 한개에 가지고 있는 order가 여러개라면.. 페이징은 어떻게 될 건지.. 다 JPA기본에서 했던 내용이긴 함. OSIV와 성능 최적화 Open Session In-View 인데 이건 처음 봄. 이걸 사용하면 지연로딩 이런데서 편하게 되는데 이걸 사용 안하게 되면 LAZY로딩 에러를 자주 만나게 된다고 함. 이걸 언제 ..

2. 회원 수정 API

수정같은 거 할 때 사용하는 용도의 http 메소드가 put https://qwefdg3.tistory.com/190 장점이 멱등하다고 표현하는데, 캐시같은 거임. 같은 요청 계속 보내도 똑같은 내용이면 처리 안함. @PutMapping("api/v2/members/{memberId}") public UpdateMemberResponse updateMemberV2( @PathVariable("memberId") Long id, @RequestBody @Valid UpdateMemberRequest request){ memberService.update(id, request.getName()); Member findMember = memberService.findOne(id); return new Upda..

27. 주문 목록 검색, 취소

@GetMapping("/orders") public String orderList(@ModelAttribute("orderSearch")OrderSearch orderSearch, Model model){ List orders = orderService.findOrders(orderSearch); model.addAttribute("orders",orders); return "order/orderList"; } public List findOrders(OrderSearch orderSearch){ return orderRepository.findAllString(orderSearch); } 이 부분은 일단 넘어가겠다. 나중에 QueryDSL 배울거기 때문에. 주문취소 @PostMapping("/orde..

26. 상품 주문

일반적인 예제는 아니다. 상품 주문할 멤버를 선택하고, 주문할 상품을 선택하고 수량을 입력하는 그런 식이다. 보통은 로그인 하고, 세션을 통해 서버의 세션저장소에서 서버가 어떤 member인지 계속 가져오고, 그 member가 상품을 주문하고 그런 식임. 지금은 좀 관리자가 상품 주문 시켜주는 느낌임. @Controller @RequiredArgsConstructor public class OrderController { private final OrderService orderService; private final MemberService memberService; private final ItemService itemService; @GetMapping("/order") public String c..

25. 변경감지와 병합

준영속 엔티티 영속성 컨테스트가 더는 관리하지 않는 엔티티 임의로 만들어낸 엔티티도 기존 식별자(id)를 가지고 있으면 그냥 준영속 엔티티로 봄. 준영속 엔티티 수정방법 2가지 변경 감지 기능 사용 병합 사용 변경감지기능 @Transactional public void updateItem(Long itemId, Book param){ Item findItem = itemRepository.findOne(itemId); findItem.setPrice(param.getPrice()); findItem.setName(param.getName()); findItem.setStockQuantity(param.getStockQuantity()); } 이렇게 영속성 컨텍스트로 관리하게끔 만들어서, 값을 변경한다. ..

24. 상품 수정

@GetMapping("/items/{itemId}/edit") public String updateItemForm(@PathVariable("itemId") Long itemId, Model model){ BookForm form = new BookForm((Book) itemService.findOne(itemId)); model.addAttribute("form", form); return "items/updateItemForm"; } 그냥 폼. 생성자는 그냥 내가 만들어 봤음. Book을 BookForm으로. 그걸 템플릿에 뿌려줌. 글번호/edit 이런 형식은 자주 있는 형식인듯. 아무 사이트 글에서 저렇게 edit 붙였더니 로그인 페이지로 이동되었음. 그 후 내 아이디로 로그인 하고 다시 edi..