분류 전체보기

    주문, 주문상품 엔티티 개발 // 복잡한생성은 생성메서드

    *생성메서드 class Order //==생성 메서드==// 복잡한생성은 생성메서드로 해결! public static Order createOrder(Member member, Delivery delivery, OrderItem... orderItems){ //...문법 == 유사리스트 Order order = new Order(); order.setMember(member); order.setDelivery(delivery); for(OrderItem orderItem:orderItems){//각각주문에대해 다 add order.addOrderItem(orderItem); } order.setStatus(OrderStatus.ORDER); order.setOrderDate(LocalDateTime.no..

    상품 서비스 개발

    package jpabook.jpashop.service; import jpabook.jpashop.domain.item.Item; import jpabook.jpashop.repository.ItemRepository; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.util.List; @Service @Transactional(readOnly = true) @RequiredArgsConstructor public class ItemService { private..

    상품 리포지토리 개발

    package jpabook.jpashop.repository; import jpabook.jpashop.domain.item.Item; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Repository; import javax.persistence.EntityManager; import java.util.List; @Repository @RequiredArgsConstructor public class ItemRepository { private final EntityManager em; public void save(Item item){ if(item.getId()==null){ em.persist(item);..

    상품 엔티티 개발 // setter없이 수정하는법

    * setter없이 수정하는법 setter사용 X, 비즈니스 로직으로 stockQuantity값수정 //==비즈니스 로직==// /** * 재고증가 * @param quantity */ public void addStock(int quantity){ this.stockQuantity+=quantity; } /** * 재고 줄이기 * @param quatity */ public void removeStock(int quatity){ int restStock = this.stockQuantity - quatity; if(restStock

    회원 기능 테스트

    회원 기능 테스트

    *테스트 어노테이션 @RunWith(SpringRunner.class) //JUnit 실행할때 스프링이랑 같이 실행해줘 @SpringBootTest //Spring boot 띄운상태로 테스트 돌려줘. (없으면 Autowired 안됨) @Transactional public class MemberServiceTest { * 회원가입검사 Transactional 문제 : Test 내의 Transactional은 기본값이 롤백 => insert 쿼리등 확인불가 해결 1 : Transactional(Rollback=false) 해결2: em 받고, em.flush @Autowired EntityManager em; @Test public void 회원가입() throws Exception{ //given Mem..

    회원 서비스 개발 //의존관계주입, @Transactional(readOnly)

    @Transactional(readOnly=true) 읽기전용모드 => 속도up 문제:쓰기가안됨 해결:쓰기해야되는 메소드위에 @Transactional(readOnly=false) package jpabook.jpashop.service; import jpabook.jpashop.domain.Member; import jpabook.jpashop.repository.MemberRepository; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional;..

    회원 리포지토리 개발

    @Repository @PersistentContext em사용법 익히기 package jpabook.jpashop.repository; import jpabook.jpashop.domain.Member; import org.springframework.stereotype.Repository; import javax.persistence.EntityManager; import javax.persistence.PersistenceContext; import java.util.List; @Repository //component scan => 자동으로 스프링빈으로 등록해줘 public class MemberRepository { @PersistenceContext //EntityManager만들어서 주입해줘..

    엔티티 설계시 주의점 // Setter제거

    엔티티 설계시 주의점 // Setter제거

    * Setter제거 문제 : Setter 무분별허용 => 오브젝트가 어디서 수정됬는지 모름 => 유지보수어렵 해결? : ??? 뒷강의(어플개발강의)에서 Setter없이 개발하는것을 보여주겠다. *LAZY(지연로딩) ※ 절대 Eager을 사용하면 안된다. 문제 : @XToOne 은 기본값이 즉시로딩(Eager) => 연관된애들 다땡겨옴, N(결과쿼리)+1(Order 쿼리) 문제. 해결 : @XToOne(fetch=FetchType.LAZY) 1. 패키지에서 C Shift F : OneToOne, ManyToOne 모두 찾기 2 . fetch 변경 @OneToOne(fetch = LAZY,mappedBy = "delivery") private Order order; *컬렉션 초기화 문제 문제 : 메소드초기화..