분류 전체보기 1341

Ch07. 웹 계층 개발 - 홈 화면과 레이아웃

resource/template/home.html HELLO SHOP 회원 기능 회원 가입 회원 목록 상품 기능 상품 등록 상품 목록 주문 기능 상품 주문 주문 내역 홈 화면 연결하기 include가 되어있는, fragments의 header, bodyHeader, footer 파일을 생성해야 한다. header.html bodyHeader.html Home HELLO SHOP footer.html © Hello Shop V2 현재는 include 스타일의 구조를 사용하여 HTML을 렌더링 할 때마다 중복되는 코드를 포함하는 스타일로 하였지만 Thymeleaf 공식 문서에 보면 계층형 구조로 중복되는 코드를 제거하는 방식도 존재 CSS와 JS 파일 같은 경우 BootStrap을 다운로드한 뒤, resou..

Ch06. 상품 도메인 개발 - 주문 검색 기능 개발

JPA에서 동적 쿼리를 어떻게 해결해야 하는가? String jpql = "select o from Order o join o.member m" + "where o.status = :status" + " and m.name like :name"; em.createQuery(jpql,Order.class)//JPA에서 Join .setParameter("status",orderSearch.getOrderStatus()) .setParameter("name",orderSearch.getMemberName()) //.setFirstResult(100)//페이징이 가능 .setMaxResults(1000) // 최대 1000건 .getResultList(); 해당 로직을 동적 쿼리로 작성하기 위해서는 어떻게 해..

Ch06. 상품 도메인 개발 - 주문 기능 테스트

@SpringBootTest @Transactional class OrderServiceTest { @Autowired EntityManager em; @Autowired OrderService orderService; @Autowired OrderRepository orderRepository; @Test public void 상품주문() throws Exception{ //given Member member = createMember(); Book book = createBook("시골 JPA",10000,10); //when int orderCount = 2; Long orderId = orderService.order(member.getId(),book.getId(),orderCount); //t..

Ch06. 상품 도메인 개발 - 주문 Repository 개발, 주문 Service 개발

주문 Repository 개발 1. save 메서드 Order를 저장한다. 2.findOne 메서드 id값으로 Order를 찾는다. 후에 findAll 메서드로 검색조건에 맞는 검색된 데이터를 출력할 것이다(동적 쿼리가 들어가야 해서 나중에...) 주문 Service 개발 @Service @Transactional(readOnly = true) @RequiredArgsConstructor public class OrderService { private final OrderRepository orderRepository; private final MemberRepository memberRepository; private final ItemRepository itemRepository; /** * 주문 *..

Ch06. 주문 도메인 개발 - 주문, 주문상품 엔티티 개발

주문 엔티티, 비즈니스 로직 개발 @Entity @Table(name = "orders") @Getter @Setter public class Order { @Id @GeneratedValue @Column(name = "order_id") private Long id; @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "member_id") private Member member;//연관관계의 주인 @OneToMany(mappedBy = "order",cascade = CascadeType.ALL) private List orderItems = new ArrayList(); @OneToOne(fetch = FetchType.LAZY,cascade = Cas..

Ch05. 상품 도메인 개발 - 상품 Service 개발

기존에 작성했던 Service코드와 비슷하다. 사실상 Repository에 기능을 위임만 하기 때문에 Service가 필요 없음 바로, Repository에 접근하여 해당 기능을 사용해도 된다. saveItem 메서드 저장 기능 findItems 메서드 모든 Item 조회 findOne 메서드 하나의 Item 조회 Test 강의의 내용이 너무 짧아 혼자 테스트 케이스를 작성해 보았다. @SpringBootTest @Transactional class ItemServiceTest { @Autowired ItemService itemService; @Autowired ItemRepository itemRepository; @Test @Rollback(value = false) public void 아이템_저..

Ch05. 상품 도메인 개발 - 상품 Repository 개발

@RequiredArgsConstructor : final 필드 값 주입 save 메서드 id 값이 없다면 : 신규 등록 em.persist() : 새로 등록한다. id 값이 있다면 : 기존에 존재 em.merge() : Update와 비슷한 기능으로 기존에 영속화되어있었던 Entity를 다시 영속화를 시킬 때 사용한다. findOne 메서드 Id 값으로 가지고 올 때 사용한다. findAll 메서드 JPQL 사용하여 리스트로 모든 내용을 가지고 온다.

Ch05. 상품 도메인 개발 - 상품 엔티티 개발(비즈니스 로직 추가)

@Entity @Getter @Setter @Inheritance(strategy = InheritanceType.SINGLE_TABLE)//하나의 테이블에 다 넣는다 @DiscriminatorColumn(name = "dtype")//구분자를 넣어준다. public abstract class Item {//상속하는 애들을 만들어주어야 한다. //전략을 부모에서 정해야 된다. @Id @GeneratedValue @Column(name = "item_id") private Long id; private String name; private int price; private int stockQuantity; @ManyToMany(mappedBy = "items") private List categories ..

Ch04. 회원 도메인 개발 - 회원 기능 테스트

테스트 요구사항 회원가입을 성공해야 한다. 회원가입할 때 같은 이름이 있으면 예외가 발생해야 한다. @SpringBootTest @Transactional class MemberServiceTest { @Autowired MemberService memberService; @Autowired MemberRepository memberRepository; @Autowired EntityManager em; @Test public void 회원가입() throws Exception{ //given Member member = new Member(); member.setName("kim"); //when Long saveId = memberService.join(member); //쿼리를 확인해보니 Inser..

Ch04. 회원 도메인 개발 - 회원 Service 개발

@Service @Transactional(readOnly = true) //기본적으로 JPA는 트렌잭션 안에서 동작해야 한다.//javax,spring에서 제공하는것 두가지가 있지만 spring에서 사용하기 때문에 spring에서 제공하는것을 쓰는게 좋다. //JPA가 조회하는것을 최적화 해준다, 읽기 전용임으로 @RequiredArgsConstructor//final 필드 값을 채워준다. public class MemberService { /* 주입 방법 1 : 필드 주입 @Autowired private MemberRepository memberRepository;// 해당 주입을 바꿀수가 없기떄문에 최근에는 많이 사용하지 않느다. */ /* 주입 방법 2 : Setter 주입, 중간에 바뀔수 있는..