[Spring Boot] 연관관계 매핑 - N:M 관계 예제
2023. 1. 1. 16:52
Spring Boot/문법 정리
N:M 관계 예제 상황 : 저자는 여러 책을 쓸 수 있고 학원도 여러 수험생을 받을 수 있는 N:M (다대다) 관계 관계형 DB는 N:M 관계를 표현할 수 없음 => 1:N, N:1 관계로 풀어내야 함 EXAMINEE와 ACADEMY 사이에 EXAMINEE_ACADEMY 테이블을 추가로 생성해 풀어냄 이 상황에서는 EXAMINEE_ACADEMY가 두 관계에서 연관관계의 주인으로 지정 이렇게 하면 또다른 장점은 추가적인 정보를 더 집어넣을 수 있음 예를 들면 수험생이 학원을 등록한 날짜 등을 추가로 집어넣을 수 있음 => 예제에서 등록 날짜까지 구현 구현 코드 Examinee Entity @Entity @Data public class Examinee { @Id @GeneratedValue(strategy..
[Spring Boot] 연관관계 매핑 - 1:1 관계 예제 (+ @PostConstruct를 사용한 초기 데이터 생성)
2023. 1. 1. 15:09
Spring Boot/문법 정리
1:1 관계 예제 1:1 관계는 1:N 관계와 거의 유사 상황 : 영화관에 자리가 여러개 존재하고 고객이 자리를 선택해야 하는 상황 고객은 자리를 하나만 선택할 수 있고, 자리도 한 고객에게만 선택될 수 있는 1:1 관계 Customer 객체에는 id와 name 정보가 들어가고, Seat 객체에는 id, rowId(AC), colId(15) 정보가 들어감 각각의 id가 primary key(기본키)로 지정 연관관계 매핑 1:N 관계에서는 보통 N쪽을 연관관계의 주인으로 지정 1:1 관계에서도 연관관계의 주인을 지정해야 함 어느쪽을 주인으로 지정해도 상관 없지만 보통은 foreign key가 있는쪽을 주인으로 지정 이 예제에서는 아래와 같이 Customer에 foreign key를 가져오고 주인으로 정했음..
[Spring Boot] 연관관계 매핑 - 1:N 관계 예제 (+FetchType.LAZY)
2022. 12. 31. 18:38
Spring Boot/문법 정리
1:N 관계 예제 상황 : Team에는 여러 Player가 속할 수 있지만, 한 Player는 여러 팀에 속할 수 없는 1:N 관계 Team 객체에는 id와 name 정보가 들어가고, Player 객체에는 id, name, age 정보가 들어감 각각의 id가 primary key(기본키)로 지정 연관관계 매핑 하나의 엔티티에 다른 엔티티의 primary key를 foreign key(외래키)로 가져와야 함 이런 상황에서는 보통 1:N 관계에서 N쪽으로 foreign key를 가져오고, 연관관계의 주인으로 지정함 이 예제에서는 team이 1, player가 N에 해당하므로 player가 연관관계 주인이 되고, team_id를 가져옴 이 상황을 JPA를 사용해 객체 생성 및 DB 연결 해보는 예제 (양방향 ..
[Spring Boot] 연관관계 매핑 - 1:1, 1:N, N:M
2022. 12. 31. 16:34
Spring Boot/문법 정리
1:1, 1:N, N:M 관계란? 두 엔티티가 서로 관계를 맺을 때, 1:1, 1:N, N:M 형태의 관계를 맺을 수 있음 1:1 (일대일) 관계 : 국가-수도, 남편-아내 등과 같은 관계 한 국가가 여러 수도를 가질 수 없고 한 도시는 여러 국가의 수도일 수 없음 1:N (일대다) 관계 => 부모-자식, 학생-학교 등과 같은 관계 한 부모는 여러 자식을 가질 수 있지만 자식은 여러 부모를 가질 수 없음 N:M (다대다) 관계 => 고객-상품, 학생-학원 등과 같은 관계 한 고객은 여러 상품을 시킬 수 있고, 한 상품은 여러 고객에게 시켜질 수 있음 연관관계 매핑이란? 객체의 참조와 테이블의 외래키를 매핑하는 것 ex) X팀에 선수 A, B, C가 속한 상황 Java에서의 관점 Team Class, Pl..
[Spring Boot] Swagger 3.0 적용
2022. 7. 9. 17:32
Spring Boot/문법 정리
Swagger 란? API 명세를 도와주는 도구 (협업을 할 때 유용) API 명세 : 프론트엔드와 백엔드 사이에서 어떤 방식으로 데이터를 주고 받을지에 대해 명세하는 것 회원 추가, 조회 예제를 만들어보고, 이 예제에 Swagger 3.0을 적용 시켜봄 회원 추가, 조회 예제 여기가 포인트가 아니기 때문에 최대한 간단하게 구현 DB도 연결 안하고 최대한 간단하게 구현 회원 추가 : 닉네임, 비밀번호를 입력받음 ID를 자동으로 추가해 회원가입 진행 회원 조회 : ID를 Path Variable로 받아 해당 회원 정보를 출력 회원 리스트 : 전체 회원 리스트 출력 User 객체 @Getter @AllArgsConstructor public class User { private int id; private ..
[Spring Boot] JpaRepository를 사용한 CRUD 예제
2022. 7. 8. 14:51
Spring Boot/문법 정리
JpaRepository 란? https://chb2005.tistory.com/105 이 예제에서는 EntityManager을 주입받아 직접 CRUD 코드를 직접 작성했었음 등록 : em.persist(member) 검색 : em.find(Member.class, memberId) ... 사실 이런 코드들은 매우 반복적임 MemberRepository, ItemRepository, ContentRepository 등 여러 Table에서 사용되는 Repository에 들어가는 코드는 대부분 비슷비슷함 이를 편리하게 하기 위해 스프링 JPA에서 미리 JpaRepository에 기능들을 구현해놓음 개발자는 구현클래스 없이 인터페이스만 작성하고 JpaRepository를 상속받아 사용하면 됨 사용방법은 매우 ..
[Spring Boot] 관계형 DB - 순환 참조 해결 방법 ( DTO활용 방법 등 )
2022. 7. 3. 18:31
Spring Boot/문법 정리
순환 참조 란? 1:1 연관관계 매핑 예제 참고 Author라는 객체와 Book이라는 객체가 있다고 생각해보자 둘은 1:1 관계로 매핑되어 있음 Author은 name, age 정보 포함 Book은 name, price 정보 포함 Book을 저장할 때 책의 저자(Author)도 같이 저장 이 상황에서 아래와 같이 Book을 조회한다면 아래와 같이 출력됨 (StackOverflow Error 발생) @GetMapping("/book/{bookId}") public Book showBook(@PathVariable Long bookId) { return bookRepository.findById(bookId).get(); } 이렇게 출력되는 이유는 1번 Book 조회시 book1에 저장되어 있는 이름, 가격..