Close
Close full mode
logo만렙 개발자 키우기

(2) 객체 매핑 시작

Git RepositoryEdit on Github
Last update: 9 months ago by nowwaterReading time: 2 min

회원 테이블 생성

CREATE TABLE MEMBER (
ID LONG AUTO_INCREMENT NOT NULL, -- 아이디(기본키)
NAME VARCHAR(255), -- 이름
AGE INTEGER NOT NULL, -- 나이
PRIMARY KEY (ID)
)

회원 클래스 생성

public class Member {
private Long id;
private String username;
private Integer age;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
}

매핑 정보

매핑 정보회원 객체회원 테이블
클래스와 테이블MemberMEMBER
기본 키idID
필드와 컬럼usernameNAME
필드와 컬럼ageAGE

매핑 정보가 포함된 회원 클래스

import javax.persistence.*;
@Entity
@Table(name="MEMBER")
public class Member {
@Id
@Column(name = "ID")
private Long id;
@Column(name = "NAME")
private String username;
private Integer age;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
}

클래스와 테이블 매핑

image

각 어노테이션 설명

@Entity

  • 테이블과 매핑한다고 JPA에게 알려준다.

  • @Entity가 사용된 클래스를 엔티티 클래스 라고 한다.

@Table

  • 엔티티 클래스와 매핑할 테이블 정보를 알려준다.

  • name 속성을 사용해서 Member 엔티티MEMBER 테이블에 매핑

  • 이 어노테이션을 생략하면 클래스 이름을 그대로 테이블 이름으로 매핑

@Id

  • 엔티티 클래스의 필드를 테이블의 기본 키(Primary Key)에 매핑

  • 엔티티의 id 필드를 테이블의 ID 기본 키 컬럼에 매핑

  • @Id 가 사용된 필드를 식별자 필드 라고 한다.

@Column

  • 필드를 컬럼에 매핑한다.

  • name 속성을 사용해서 Member 엔티티의 username 필드를 테이블의 NAME 컬럼에 매핑

매핑 정보가 없는 필드

  • 매핑 어노테이션을 생략하면 필드명을 사용해서 컬럼명으로 매핑된다.

  • 필드명이 age이므로 age 컬럼으로 매핑

  • 만약 대소문자를 구분하는 데이터베이스를 사용하면 @Column(name="AGE") 처럼 명시적으로 매핑해야 한다.


하이버네이트 설정 옵션

데이터베이스마다 차이점

  • 데이터 타입 (가변 문자 타입 => MySQL 은 VARCHAR, 오라클은 VARCHAR2 사용)

  • 다른 함수명 (문자열 자르기 => SQL 표준은 SUBSTRING(), 오라클은 SUBSTR() )

  • 페이징 처리 (MySQL은 LIMIT, 오라클은 ROWNUM)

Dialect(방언) : JPA에서 SQL 표준을 지키지 않거나 특정 데이터베이스만의 고유한 기능

옵션

  • hibernate.show_sql : 실행한 SQL을 출력.

  • hibernate.format_sql : SQL을 보기 좋게 정렬함.

  • hibernate.use_sql_comments : 쿼리 출력 시 주석도 함께 출력

  • hibernate.id.new_generator_mappings : JPA 표준에 맞는 새로운 키 생성 전략을 사용함.

하이버네이트 설정

  • create : Session Factory가 실행될 때 스키마를 지우고 다시 생성. 클래스패스에 import.sql이 존재하면 찾아서 해당 SQL도 함께 실행한다.
  • create-drop : create와 같지만 session factory가 내려갈 때 스키마 삭제
  • update : 시작 시, 도메인과 스키마를 비교하여 필요한 컬럼 추가 등의 작업을 실행. 데이터는 삭제하지 않는다.
  • validate : Session factory 실행 시 스키마가 적합한지 검사함. 문제가 있으면 에외 발생
  • 개발 시에는 create, 운영 시 auto 설정을 빼거나 validate 정도로 두는 것이 좋아 보인다. update로 둘 경우, 개발자들의 스키마가 마구 꼬여서 결국은 drop 해서 새로 만들어야 하는 사태가 발생한다.
🚀 JPA — Previous
(1) H2 데이터베이스 설치
Next
(3) 어플리케이션 개발