JPA 37

다대일 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

Tomcat

웹서버 Tomcat 아파치는 요청한 파일을 응답해주는 것이다. 톰캣은 요청한 파일중에 자바파일 코드가 요청이 되면 그걸 컴파일해서 html 파일로 번역해서 돌려주는 애가 톰캣이다. response 할 때는(요청할 때) 보통 웹 브라우저로 요청을 하는데 .JSP 파일을 찾아서 돌려주기만 하면 웹서버이다. 대신에 웹 브라우저는 html css js 를 모두 세가지(동영상 파일 ex) avi )를 받는다. https://www.youtube.com/watch?v=fBcL6hPckyA&list=PL93mKxaRDidG_OIfRQ4nztPQ13y74lCYg&index=9

Spring/SpringBoot 2022.05.06

ORM & 영속성 컨텍스트 & OOP 관점 모델링 & HTTP

ㅇORM Object Relational Mapping : 오브젝트를 데이터베이스에 연결하는 방법론 자바에서 클래스를 만들어서 실행을 하면 데이터베이스에 자동으로 생성되게 하는 기법이 ORM이다. ORM 데이터를 자바 오브젝트로 바꾸고 연결된 세션을 끊고 연결된 커넥션을 끊고하는 모든 일련의 과정을 함수 하나로 제공해준다. CRUD로 기본적으로 반복되는 작업들을 단순하게 도와준다. 영속성 컨텍스트 영속성: 데이터 -> 영구적으로 저장! DB -> MySQL로 컨텍스트: context 자바가 처리하는 모든 메타데이터 정보를 영속성 컨텍스트가 들고있다.결론은 자바와 DB 둘다 영속성 컨텍스트를 통해서 데이터가 서로에게 전달이 된다. 영속성 컨텍스트에 있는 일들은 모두 자동으로 처리가 된다. JPA는 DB와..

Spring/SpringBoot 2022.05.06

MessageConverter & JPA

자바 Object 파이썬 Object 서로 호환하게 해주는게 JSON MessageConverter가 자동으로 번역해서 던져준다. 자바에서는 Jackson 라이브러리가 자바 Object가 JSON으로 변경해준다. @ResponseBody => Buffered writer @RequestBody => Buffered Reader JPA JPA는 Java Persistence API이다. 데이터 베이스가 종료되도 영구히 데이터를 기록할 수 있는 환경을 제공해주는걸 JPA라 한다. 즉 자바 (Java) 프로그램을 영구적으로 (Persistence) 저장할 때 인터페이스 (API) 가 JPA이다. JPA는 ORM 기술이다. JPA는 반복적인 CRUD 작업을 생략하게 해준다. JPA는 영속성 컨텍스트를 가지고 있..

Spring/SpringBoot 2022.05.06

스프링부트 개념정리 with JPA - 스프링의 핵심 & 필터

1. 스프링이란? 스프링은 프레임워크 & 오픈소스 프레임워크는 틀이다. 틀을 벗어나는 개발을 하면 안된다. 그리고 오픈소스이다. => 공개되어있고 내부를 뜯어 고칠 수 있다. 기여도 할 수 있다 IoC 컨테이너를 가진다. Inversion of Control 제어의 역전이다. 주도권이 스프링에게 있다. Class -> 설계도! Object -> 실체화가 가능한 것!(아직 실체화 안된 것) Instance -> 실체화가 된 것(세상에 튀어나온 것) 가구 => 의자 / 침대 => Object 의자의 주소관리는 어떻게 한다? DI를 지원한다. 스캔을 하면 딱 한번만 메모리에 뜨고 한번 뜬 의자를 공유해서 사용할 수 있다. IoC와 DI를 하면 굉장히 프로그램일 짜는게 편하게 된다. 엄청나게 많은 필터를 가지고..

Spring/SpringBoot 2022.05.06

예제 도메인 모델 동작확인

예제 도메인 모델을 참고하여 엔티티 코드를 작성해보자. // Member Class package study.querydsl.entity; import lombok.*; import javax.persistence.*; @Entity // Setter는 실무에서 가급적 쓰지말자 @Getter @Setter @NoArgsConstructor(access = AccessLevel.PROTECTED) //ToString은 아래를 자동으로 만들어준다. //@Override //public String toString() { // return "Member{" + // "id=" + id + // ", username='" + username + '\'' + // ", age=" + age + // ", team..

Spring/QueryDSL 2022.04.19