Spring 177

Spring Boot으로 웹 출시까지

여기서 프로젝트를 시작해보자. 그리고 Building Restful Web Service 사이트에서 튜토리얼을 진행 해준다. Greeting Class package com.godcoder.myrest; public class Greeting { private final long id; private final String content; public Greeting(long id, String content) { this.id = id; this.content = content; } public long getId() { return id; } public String getContent() { return content; } } GreetingController Class package com.god..

Spring/SpringBoot 2022.05.30

Mapped Superclass - 매핑 정보 상속 / 상속관계 매핑

BaseEntity 클래스를 만들어보자. 추상클래스로 쓰자. @MappedSuperclass public abstract class BaseEntity { package hellojpa; import javax.persistence.MappedSuperclass; import java.time.LocalDateTime; @MappedSuperclass public class BaseEntity { private String createdBy; private LocalDateTime createdDate; private String lastModifiedBy; private LocalDateTime lastModifiedDate; public String getCreatedBy() { return crea..

Spring/JPA 2022.05.28

실전 예제 3 - 다양한 연관관계 매핑

배송, 카테고리 추가 - 엔티티와 ERD를 보자. Delivery 및 Category Class를 만들어주자. package jpabook.jpashop.domain; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.Id; @Entity public class Delivery { @Id @GeneratedValue private Long id; private String city; private String street; private String zipcode; private DeliveryStatus status; } Order와 Delivery의 관계를 1대1로 잡아준다...

Spring/JPA 2022.05.25

일대일 1:1 / 다대다 N:M

일대일 관계 일대일 관계는 반대도 일대일이다. 주 테이블이나 대상 테이블 중에 외래 키 선택 가능 주 테이블에 왜래 키 대상 테이블에 외래 키 외래 키에 DB 유니크(UNI) 제약조건 추가 다대일(@ManyToOne) 단방향 매핑과 유사하다. Locker를 만들어주자. package hellojpa; import javax.persistence.GeneratedValue; import javax.persistence.Id; public class Locker { @Id @GeneratedValue private Long id; private String name; } Member Class에도 설정을 해주고 돌리면 Locker_ID와 Member Class가 생성이 된다. @OneToOne @JoinCo..

Spring/JPA 2022.05.25

다대일 N:1 / 일대다 1:N

연관관계 매핑시 고려사항 3가지 다대일[N:1] 일대다[1:N] 일대일[1:1] 다대다[N:M] 다양한 연관관계 매핑 단방향, 양방향 테이블 외래 키 하나로 양쪽 조인 가능 객체 참조용 필드가 있는 쪽으로만 참조 가능 한쪽만 참조하면 단방향 양쪽이 서로 참조하면 양방향 연관관계의 주인 테이블은 외래 키 하나로 두 테이블이 연관관계를 맺음 객체 양방향 관계는 A -> B, B->A 처럼 참조가 2군데 객체 양방향 관계는 참조가 2군데 있음. 둘중 테이블의 외래 키를 관리할 곳을 지정해야 함 연관관계의 주인: 외래 키를 관리하는 참조 주인의 반대편: 외래 키에 영향을 주지 않음, 단순 조회만 가능 다대일(N:1)부터 보자. 외래키가 있는 곳에 참조를 걸고 매핑을 하면되는 그림이다. 다대일 단방향 관계는 아래..

Spring/JPA 2022.05.25

예제 - 연관관계 매핑 시작

연관관계 매핑의 객체 구조는 이렇다. MEMBER와 ORDER와의 관계에서는 MEMBER_ID만(FK) 잘 매핑해주면 된다. 연관관계 매핑을 해주자. @Entity @Table(name = "ORDERS") public class Order { @Id @GeneratedValue @Column(name = "ORDER_ID") private Long id; // @Column(name = "MEMBER_ID") // private Long memberId; @ManyToOne @JoinColumn(name = "MEMBER_ID") private Member member; private LocalDateTime orderDate; @Enumerated(EnumType.STRING) private Orde..

Spring/JPA 2022.05.25

양방향 연관관계와 연관관계의 주인

아래 코드를 보게 되면 member에서 Team으로는 갈 수 있다. 반대로 team에서 getMember()는 안된다. 일단 왔다갔다 참조는 할 수 있다. => 양방향 연관관계 // ex1-hello-jpa / hellojpa / JpaMain // 저장 Team team = new Team(); team.setName("TeamA"); em.persist(team); Member member = new Member(); member.setUsername("member1"); // 이렇게 해주면 JPA가 알아서 PK값을 team에서 꺼내서 FK값에 insert해준다. member.setTeam(team); em.persist(member); em.flush(); em.clear(); Member find..

Spring/JPA 2022.05.08

DispatcherServlet & ApplicationContext & 응답(Response)하는 방법

tistory 참고하면서 공부하자. FrontController 패턴 최초 앞단에서 request 요청을 받아서 필요한 클래스에 넘겨준다. 왜? web.xml에 다 정의하기가 힘들어서 이때 새로운 요청이 생기기 때문에 request와 response가 새롭게 new가 될 수 있다. 아래의 RequestDispatcher가 필요함. 기존의 있는 request와 response를 지우지 않고 그대로 들고와서 다시 요청을 하는 방법이 있다. => RequestDispatcher RequestDispatcher 필요한 클래스 요청이 도달했을 때 FrontController에 도착한 request와 response를 그대로 유지시켜준다. 결론적으로 RequestDispatcher을 이용해야 데이터를 들고 페이지..

Spring/SpringBoot 2022.05.06

서블릿 객체의 생명주기 & web.xml

서블릿 컨테이너(톰캣) 톰캣은 자바 코드를 통해 최초의 요청을 받을 때 스레드를 받는다. -> 서블릿 객체를 만든다.(필요한 데이터 가져옴) 스레드는 동시접근을 허용하게 해준다. 스프링은 클라이언트가 요청을 했을 때 서블릿 컨테이너가 동작을 무조건 한다. (URI 요청을 하기 때문에) 최초 요청이 오면 메모리 로딩을 해서 서블릿 객체를 하나 만들고 실행을 한다. 그리고 스레드가 20개이면 두번째 요청부터 스무번째 요청까지 쭉 요청이 되고 21번째 부터 no가 요청이 될 것이다. 그리고 마지막으로 최종적으로 만들어지는 것이 Request 객체와 Response 객체이다.(톰캣이 들고 있는 객체) web은 Request와 Response의 여행이다. Request와 Response가 종료가 되면 여행은 끝나..

Spring/SpringBoot 2022.05.06