2.1 영속성 유닛 설정

# DataSource Setting
spring.datasource.driverClassName=org.h2.Driver
spring.datasource.url=jdbc:h2:tcp://localhost/~/test
spring.datasource.username=sa
spring.datasource.password=1234

# JPA Setting
spring.jpa.hibernate.ddlAuto=update
spring.jpa.generateDdl=false
spring.jpa.showSql=true
spring.jpa.databasePlatform=org.hibernate.dialect.H2Dialect
spring.jpa.properties.hibernate.format_sql=true

# Logging Setting
logging.level.org.hibernate=info

현재 설정이 다음과 같이 되어있다.

 

DataSource Setting)

위에서부터 차례대로

1. JDBC 드라이버 클래스,

2. 데이터베이스의 아이디,

3. 데이터베이스의 비밀번호,

4. JDBC URL 정보를 의미한다.

 

 

JPA Setting)

실질적으로 기능을 제공할 JPA 구현체에 대한 설정이다.

위에서부터 차례대로

1. DDL 구문(CREATE, ALTER, DROP)을 자동으로 실행할지 지정한다.

예를 들어 해당 설정값이 create면 매번 테이블을 새로 생성하게 되며 update는 기존의 테이블을 재사용한다

 

2. 

 

3. 하이버네이트가 생성한 SQL을 콘솔에 출력할지 여부를 설정한다.

 

4. 어떤 데이터베이스에 최적화된 SQL을 생성할지 설정한다.

현재 사용하고 있는 데이터베이스가 H2 이므로 이에 맞는 H2Dialect 클래스를 등록하였다. (H2 방언 사용)

 

5. 하이버네이트가 생성한 SQL을 출력할 때, 보기 좋은 포맷으로 출력한다.

 

Logging Setting)

로그 설정이다.

 

 

2.2 엔티티 매핑 설정하기

2.2.1 엔티티 매핑하기

 

(1) Entity와 id 애너테이션

 

@Entity는 자바 클래스를 JPA가 관리하는 엔티티로 인식하게 하는 애너테이션이다.

그리고 이 엔티티를 식별할 수 있게 하는 식별자를 지정하는 애너테이션은 @Id이다(PK값을 설정한다고 생각)

 

@Getter
@Setter
@ToString(exclude = "boardList")
@Entity
public class Member {

    @Id
    private String id;
    private String password;
    private String name;
    private String role;

}

 

(2) Table 애너테이션

 

엔티티 이름과 테이블 이름이 다른 경우에 @Table을 이용하여 매핑할 테이블 이름을 지정할 수 있다.

@Getter
@Setter
@ToString(exclude = "boardList")
@Entity
@Table(name="K_BOARD")
public class Member {

    @Id
    private String id;
    private String password;
    private String name;
    private String role;

}

(Member 라는 클래스를 K_BOARD 테이블과 매핑하라는 설정)

 

(3) Column 애너테이션

 

@Column은 엔티티의 변수와 테이블의 칼럼을 매핑할 때 사용한다.

이 애너테이션이 없으면 기본적으로 객체의 변수 이름이 테이블의 칼럼명이 되는데, 만약 변수 이름이 칼럼명과 다를 경우에 직접 칼럼 이름을 지정하기 위해 사용한다.

@Column 의 속성이 다양한데, 일반적으로 칼럼 이름 지정에 사용되는 name과 NULL 데이터 입력 방지를 위한 nullable이 자주 사용된다.

 

ex)

@Getter
@Setter
@ToString(exclude = "boardList")
@Entity
@Table(name="K_BOARD")
public class Member {

    @Id
    @Column(name = BOARD_ID, nullable = false)
    private String id;
    private String password;
    private String name;
    private String role;

}

 

(4) Temporal 애너테이션

java.util.Date 타입의 날짜 데이터를 매핑할 때 사용한다.

속성으로 날짜만 출력할 것인지(TemporalType.DATE), 시간만 출력할 것인지(TemporalType.TIME), 날짜와 시간 모두 출력할 것인지(TemporalType.TIMESTAMP) 지정할 수 있다.

 

ex)

@Getter
@Setter
@ToString(exclude = "boardList")
@Entity
@Table(name="K_BOARD")
public class Member {

    @Id
    @Column(name = BOARD_ID, nullable = false)
    private String id;
    private String password;
    private String name;
    private String role;
    @Temporal(TemporalType.DATE)
    private Date createDate;

}

 

(5) Transient 애너테이션

엔티티 클래스의 변수들은 대부분 테이블의 칼럼과 매핑된다. 그러나 몇몇 변수는 매핑되는 칼럼이 없거나 검색 관련 변수같이 임시로 사용되는 변수들은 아예 매핑에서 제외해야 하는 경우도 있다. @Transient는 엔티티 클래스 내의 특정 변수를 영속 필드에서 제외할 때 사용한다.

 

ex)

@Getter
@Setter
@ToString(exclude = "boardList")
@Entity
@Table(name="K_BOARD")
public class Member {

    @Id
    @Column(name = BOARD_ID, nullable = false)
    private String id;
    private String password;
    private String name;
    private String role;
    
    @Temporal(TemporalType.DATE)
    private Date createDate;
	
    @Transient
    private String searchCondition;
    
    @Transient
    private String searchKeyword;
}

 

2.3 식별자 값 자동 증가시키기

2.3.1 식별자 값 자동증가

 

식별자로 사용할 변수에 @GeneratedValue라는 애너테이션을 사용하면 식별자 값을 자동으로 생성할 수 있다.

속성으로 strategy가 있는데, 자동 생성 전략을 선택할 수 있다.

전략은 TABLE, SEQUENCE, IDENTITY, AUTO 네 가지가 있는데 TABLE과 SEQUENCE 전략을 주로 사용한다.

 

TABLE 전략은 PK생성만을 위한 별도의 테이블을 통해서 PK값을 얻는 것이고

SEQUENCE 전략은 시퀀스 제너레이터를 통해서 PK를 얻는 것이다.

 

2.3.4 자동 전략 사용하기

 

strategy 속성을 따로 설정하지 않으면 기본값인 AUTO가 적용된다.

(데이터베이스와 무관하게 키 자동 생성, autoIncrement)

 

 

 

 

'Spring & SpringBoot > JPA 퀵스타트' 카테고리의 다른 글

JPA 퀵스타트 Part 4  (0) 2023.05.12
JPA 퀵스타트 Part 3  (0) 2023.05.11
JPA 퀵스타트 Part 1  (0) 2023.04.27

+ Recent posts