프로그래밍 언어/Spring

<Spring Boot> LMS 프로젝트8. JPA 엔티티 매핑

창조적생각 2021. 12. 9. 12:36

 

<목차>

 

1.스프링부트 의존성 설정

 

2. application.yml을 이용한 데이터베이스 연결(mysql)

 

3. 엔티티 매핑

 

4. 실행결과

 

1.스프링부트 의존성 설정

 

2. application.yml을 이용한 데이터베이스 연결(mysql)

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
server:
  port: 8081
spring:
  datasource:
    url: jdbc:mysql://localhost:3306/lms_jpa?serverTimezone=UTC&characterEncoding=UTF-8
    username: root
    password: 1234
    driver-class-name: com.mysql.cj.jdbc.Driver
 
  jpa:
    hibernate:
      ddl-auto: create
    properties:
      hibernate:
        show_sql: true
        format_sql: true
 
logging.level:
  org.hibernate.SQL: debug
  org.hibernate.type: trace
cs

*서버 포트를 8081로 수정한 이유는 이미 8080을 사용하고 있어서 부득이하게 바꾼 것입니다.

 

**데이터베이스는 mysql을 사용했습니다. url과 name password driver class를 지정해줍니다.

 

*** jpa:  hibernate:  ddl-auto:  create 를 사용하여 새로 시작할 때마다 데이터베이스를 초기화하고 새롭게 만들어줍니다.

3. 엔티티 매핑

 

1) 엔티티 다이어그램

member 안의 회원들의 출석을 체크하기 위해 attend 테이블이 필요합니다.

그렇기때문에 attend 테이블이 member테이블과 member_id를 외래키로 하는 1대 다 관계의 테이블을 만들어줍니다.

 

학생용 숙제 테이블인 homeworkstudent는 memberId와 출제된 숙제인 homeworkteacher의 homework_teacher_id를 외래키로 하는 1대 다 관계를 맺게 합니다.

 

2) 클래스 매핑

 

Member

 

1
2
3
4
5
6
7
8
9
@Entity
@Getter
public class Member {
    @Id
    @Column(name = "member_id")
    private String id;
    @Column(name = "member_name")
    private String name;
}
cs

단방향 매핑이므로 따로 member에 관계를 설정해주지 않습니다.

 

Attend

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
package com.example.lms_jpa.domain;
 
import lombok.Getter;
 
import javax.persistence.*;
import java.util.Date;
 
@Entity
 
public class Attend {
    @Id
    @GeneratedValue
    @Column(name = "attend_id")
    private Long id;
 
    @ManyToOne
    @JoinColumn(name = "member_id")
    private Member member;
 
    private Date enter_datetime;
 
    private Date left_dateTime;
 
    @Enumerated(EnumType.STRING)
    private AttendStatus attendStatus;
}
cs

@ManyToOne으로 1대 다의 관계를 알려주고, JoinColumn을 사용하여 member_id를 외래키라고 알려줍니다.

 

HomeworkStudent

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
package com.example.lms_jpa.domain;
 
import javax.persistence.*;
import java.util.Date;
 
@Entity
public class HomeworkStudent {
    @Id
    @GeneratedValue
    @Column(name = "homework_student_id")
    private Long id;
 
    @ManyToOne
    @JoinColumn(name = "member_id")
    private Member member;
 
    @ManyToOne
    @JoinColumn(name = "homework_teacher_id")
    private HomeworkTeacher homeworkTeacher;
    //private homeworkfile
 
    private Date registDatatime;
}
 
cs

 

HomeworkTeacher

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
package com.example.lms_jpa.domain;
 
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import java.util.Date;
 
@Entity
public class HomeworkTeacher {
    @Id
    @GeneratedValue
    @Column(name = "homework_teacher_id")
    private Long id;
 
    private String subject;
    private Date startDate;
    private Date dueDate;
}
 
cs

 

 

4.실행결과

LmsLpaApplication을 실행해줍니다.

그리고 mysql에 들어가 테이블들을 확인해줍니다.

 

테이블 전체

member

attend

homework_student

homework_teacher

728x90