Search
Duplicate
📒

[스프링 JPA] 01. 프로젝트 환경설정 및 도메인 모델 작성

상태
완료
수업
JPA
주제
JPA
4 more properties
참고

프로젝트 환경설정

프로젝트 생성

NOTE
Spring boot
사용 기능(라이브러리) : web, jpa, h2, lombok

설정 코드

NOTE
spring: datasource: url: jdbc:h2:tcp://localhost/~/datajpa username: sa password: driver-class-name: org.h2.Driver jpa: hibernate: ddl-auto: create properties: hibernate: show_sql: true format_sql: true logging.level: org.hibernate.SQL: Debug #org.hibernate.type: trace
YAML
복사
dependencies { implementation 'org.springframework.boot:spring-boot-starter-data-jpa' implementation 'org.springframework.boot:spring-boot-starter-web' implementation 'com.github.gavlyukovskiy:p6spy-spring-boot-starter:1.5.7' compileOnly 'org.projectlombok:lombok' runtimeOnly 'com.h2database:h2' annotationProcessor 'org.projectlombok:lombok' testImplementation 'org.springframework.boot:spring-boot-starter-test' }
Groovy
복사
h2 데이터베이스는 설치가 되었다고 가정하고 진행한다.

예제 도메인 모델

NOTE
MemberTeam 2개의 엔티티를 구현하고 연관관계를 맺어준다.

엔티티 클래스

Meber와 Team은 N 대 1 관계이다.

ERD

외래키는 Member에서 가지고 있는다.

코드

@Entity @Getter @Setter @NoArgsConstructor(access = AccessLevel.PROTECTED) @ToString public class Member { @Id @GeneratedValue @Column(name = "member_id") private Long id; private String userName; private int age; @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "team_id") @ToString.Exclude private Team team; public Member(String userName){ this.userName = userName; } public Member(String userName, int age, Team team) { this.userName = userName; this.age = age; if (team != null) { changeTeam(team); } } public void changeTeam(Team team){ this.team = team; team.getMembers().add(this); } }
Java
복사
@Entity @Getter @Setter @NoArgsConstructor @ToString public class Team { @Id @GeneratedValue @Column(name = "team_id") private Long id; private String name; @OneToMany(mappedBy = "team") @ToString.Exclude private List<Member> members = new ArrayList<>(); public Team(String userName) { this.name = userName; } }
Java
복사