엔티티 매핑
엔티티를 매핑하는 방법에는 XML, 어노테이션 총 2가지의 방식이 있지만 보통 어노테이션 방식으로 사용하게 됩니다.
어노테이션을 활용하여 매핑하는 법에 대해 알아보겠습니다.
여기서 실습하는 코드는 이전에 학습했던 프로젝트세팅 포스팅에 설명되어 있습니다
@Entity
엔티티 클래스를 빈으로 등록하여 JPA와 연동할 수 있도록 해줍니다. 기본적으로 @Table을 포함하고 있습니다.
@Entity(name = "users")
도메인 클래스명을 다른 클래스명으로 정의하고 테이블을 만들려고 할 때 name을 선언합니다.
도메인명은 User지만 users로 테이블이 생성된 모습입니다.
@Id, @GeneratedValue
- @Id : 엔티티와 주키를 매핑할 때 사용합니다.
- 자바의 모든 primitive 타입과 타입에 대한 wrapper 클래스를 사용할 수 있습니다.
- @GeneratedValue : 주키의 생성 방법을 매핑할 때 사용합니다.
- 보통은 AUTO(기본값)를 사용합니다.
@Column
컬럼에 대한 설정 값을 매핑할 때 사용합니다.
- unique : unique 사용여부를 결정합니다.
- nullable : null 사용여부를 결정합니다.
- columnDefinition : 반드시 SQL문을 작성해야할 때 사용합니다.
username은 null이면 안되고 unique해야한다는 매핑을 한 예시입니다.
@Temporal
날짜를 매핑할 때 사용합니다.
- Java의 Date에 관련된 값을 타입에 맞게 변환해줍니다.
@Transient
도메인에는 선언하였지만 컬럼으로는 매핑되지 않도록 합니다.
엔티티 클래스
지금까지 학습한 어노테이션을 적용한 엔티티 클래스를 보겠습니다.
import javax.persistence.*;
import java.util.Date;
@Entity
public class Account {
@Id
@GeneratedValue
private Long id;
@Column(nullable = false, unique = true)
private String username;
private String password;
@Temporal(TemporalType.TIMESTAMP)
private Date created = new Date();
private String yes;
@Transient
private String no;
}
위 모든 어노테이션을 활용해 보았을때의 클래스 모습입니다.
결과를 보면 TIMESTAMP형식으로 날짜가 들어간 것을 확인할 수 있고 no 변수는 @Transient로 인해 컬럼에 매핑되지 않은 것을 볼 수 있습니다.
SQL을 확인하고 싶다면?
JPA에서 자동으로 생성해서 처리한 SQL을 Console에서 볼 수 있는데 application.properries에서 쉽게 설정이 가능합니다.
spring.jpa.show-sql=true
위 설정은 SQL이 실행되는 경과를 출력하는 역할을 해줍니다.
spring.jpa.properties.hibernate.format_sql=true
위 설정은 위에서 보여주는 SQL을 가독성 높게 출력해줍니다.
그래서 두 설정을 한 후 출력하게 되면..
위처럼 보기 쉽게 SQL문을 확인할 수 있습니다.