Java
상품 서비스 개발
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없이 개발하는것을 보여주겠다. *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; *컬렉션 초기화 문제 문제 : 메소드초기화..
엔티티 클래스 개발1 // JPA 어노테이션
테이블, 기본키, 기본키자동생성 @Entity @Id @GeneraedValue @Entity //Member 테이블 만들어줘. public class Member { @Id //Long id를 키로 해줘. @GeneratedValue //기본키 자동으로 생성해줘(1씩증가) private Long id; private String name; private Address address; } @Embeddable package jpabook.jpashop.domain; import lombok.Getter; import javax.persistence.Embeddable; @Embeddable //내장가능 @Getter public class Address { private String city; priva..