build.gradle
설정과 DB 만들기implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
implementation 'mysql:mysql-connector-java:8.0.32'
그 후에 IDE를 이용하거나 shell 창을 이용해 create database (DB 이름)
를 진행한다.
**main/resources
안에 application.properties
에 다음을 추가한다.
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://127.0.0.1:[포트]/[데이터베이스 이름]
spring.datasource.username=[이름]
spring.datasource.password=[비밀번호]
spring.jpa.database-platform=org.hibernate.dialect.MySQLDialect
spring.jpa.properties.hibernate.show_sql=true
spring.jpa.properties.hibernate.format_sql=true
spring.jpa.hibernate.ddl-auto=update
package com.mysite.sbb;
import jakarta.persistence.*;
import lombok.Getter;
import lombok.Setter;
import java.time.LocalDateTime;
@Getter
@Setter
@Entity
public class Question {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
@Column(length = 200)
private String subject;
@Column(columnDefinition = "TEXT")
private String content;
private LocalDateTime createDate;
}
@Getter
,@Setter
: Getter와 Setter method를 자동으로 생성하기 위해
@Entity
: Question
클래스를 엔터티로 만들기 위해. 즉, 스프링 부트가 Question
class를 엔터티로 인식시키 위해 사용한다.
@Id
: id 애너테이션은 id 속성을 기본키로 지정.
@GeneratedValue
: 데이터를 저장할 때 해당 속성 값을 입력하지 않아도 자동으로 1씩 증가해 저장
strategy = GenerationType.IDENTITY
: 해당 속성만 별도로 번호가 차례대로 늘어나도록 사용. => 이 strategy 옵션을 생략하면 이 어노테이션이 지정된 모든 속성에 번호를 차례대로 생성하기 때문에 보통 이 옵션을 많이 사용@Column
: 엔터티 클래스에서 데이터베이스의 col과 매핑할 이름을 지정하기 위해 사용
@Column(name = "STUDENT_NAME")
private String name;
을 하면 student_name varchar(255)
가 생성됨
@Column(columnDefinition = "varchar (100) default 'EMPTY'")
private String subject;
결과 => subject varchar (100) default 'EMPTY'
가 생성
package com.mysite.sbb;
import jakarta.persistence.*;
import lombok.Getter;
import lombok.Setter;
import java.time.LocalTime;
@Getter
@Setter
@Entity
public class Answer {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
@Column(columnDefinition = "TEXT")
private String content;
private LocalTime createDate;
@ManyToOne
private Question question;
}
@ManyToOne
: N:1 관계를 나타낼 때 사용 ⇨ 데이터베이스에서 외래키 관계가 생성됨.
(부모-자식 관계를 가질 때 사용 -> 부모 : Question, 자식 : Answer)
- 유사 : `@OneToMany`, `@ManyToMany`
- `@OneToMany`인 경우 옵션으로 `@OneToMany(mappedBy = "question", cascade = CascadeType.REMOVE)`를 줄 수 있음
→ 예를 들어 게시글이라고 하면 삭제할 때 답변도 같이 삭제되게 처리되게 해줌.
최종적으로 이 두개를 실행시키면 Answer table과 Questions table이 DB에 만들어져 있다.
출처 : 점프 투 스프링부트, MySQL과 연동