@Entity@Entity
public class Member { // member 테이블과 매핑
// 클래스 내용
}
@Tableuser, like 등은 DB에서 예약어로 쓰여 충돌이 발생할 수 있다@Entity
@Table(name = "members")
public class Member {
// 클래스 내용
}
@Id, @GeneratedValue@Id: PK 매핑@GeneratedValue: PK 자동 생성 전략 지정. MySQL에선 IDENTITY를 사용@Entity
@Table(name = "members")
public class Member {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
// ...
}
@Columnname: 컬럼명(디폴트는 필드명과 같음)length: 문자 길이 제약 조건(디폴트: 255)nullable: null 허용 여부unique: 유일 제약 조건@Entity
@Table(name = "members")
public class Member {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(unique = true, nullable = false)
private String email;
}
DB 테이블
CREATE TABLE users (
id BIGINT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(50) NOT NULL,
email VARCHAR(255) NOT NULL UNIQUE,
address VARCHAR(255)
);
엔티티 클래스
@Getter
@Entity
@Table(name = "users")
@NoArgsConstructor(access = AccessLevel.PROTECTED)
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(length = 50, nullable = false)
private String name;
@Column(unique = true, nullable = false)
private String email;
private String address;
}
JPA Entity 클래스 코드 작성 시, 다음의 어트리뷰트는 기본적으로 포함한다.
1.@Getter
2.@Entity
3.@Table
4.@NoArgsConstructor(access = AccessLevel.PROTECTED)
5.@Id
6.@GeneratedValue(strategy = GenerationType.IDENTITY)
의존성
User.java 추가
package org.example.jpa_practice;
import jakarta.persistence.*;
import lombok.AccessLevel;
import lombok.Getter;
import lombok.NoArgsConstructor;
@Getter
@Entity
@Table(name = "users")
@NoArgsConstructor(access = AccessLevel.PROTECTED)
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(length = 50, nullable = false)
private String name;
private String address;
}
JPA DDL 설정
resources/application.properties: 프로젝트 설정 파일, 환경변수# 호스트 정보
spring.datasource.url=jdbc:mysql://localhost:3306/{데이터베이스명}
spring.datasource.username=root
spring.datasource.password=12345678
# DB 정보
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQLDialect
# JPA 설정값
spring.jpa.hibernate.ddl-auto=create
spring.jpa.show-sql=true
spring.jpa.properties.hibernate.format_sql=true
spring.jpa.hibernate.ddl-auto
- 앱이 시작될 때 기존 테이블을 어떻게 할지를 결정
| 옵션 | 설명 | 사용 시기 |
|---|---|---|
create | 기존 테이블 삭제 후 재생성 | 개발 초기 |
create-drop | create + 애플리케이션 종료 시 삭제 | 테스트 |
update | 변경분만 반영 (컬럼 추가만 가능) | 개발 중 |
validate | 엔티티와 테이블 매핑 정보만 확인 | 운영 |
none | DDL 자동 생성 사용 안함 | 운영 |
spring.jpa.show-sql: 실행하는 SQL 쿼리를 System.out에 출력할지 설정spring.jpa.properties.hibernate.format_sql: 출력할 쿼리를 포매팅할지 설정Docker 컨테이너를 실행하고, 데이터 소스를 설정한 뒤 애플리케이션을 실행하면 다음의 로그를 확인할 수 있다. 엔티티에서 구성한대로 테이블이 만들어진다.
