Object Relational Mapping
- 객체와 데이터베이스의 관계를 매핑해주는 도구) 기술 표준, 인터페이스의 모음 build.gradle
dependencies 추가implementation 'org.springframework.boot:spring-boot-starter-data-jpa' implementation group: 'com.oracle.database.jdbc', name: 'ojdbc6', version: '11.2.0.4'
application.properties
옵션 추가 #DB Connection spring.datasource.url = jdbc:oracle:thin:@localhost:1521:xe // DB url spring.datasource.driver-class-name=oracle.jdbc.OracleDriver // DB 드라이버 spring.datasource.username=spring // DB username spring.datasource.password=spring // DB password #jpa spring.jpa.show-sql=true spring.jpa.hibernate.ddl-auto=none
create, create-drop, update
옵션 등은 사용하지 않고 직접 데이터베이스를 조작하는 것이 좋다.@Entity
: JPA로 DB를 사용할 경우 DTO객체에 @Entity
어노테이션을 이용한다.
Entity는 DB테이블과 일대일로 매칭되는 객체 단위로, Entity 객체 인스턴스 하나가 레코드 값 하나를 의미한다.
@Id
: 각 Entity 인스턴스는 각자 구분하기 위한 유일한 키값을 필요로 한다. @Id
어노테이션으로 테이블의 Primary Key를 지정하며, 데이터베이스는 이 키 값을 기준으로 데이터 질의 결과를 반환해 준다.
@Table
: @Table
어노테이션으로 테이블 옵션을 지정할 수 있으며, 별다른 설정을 하지 않을 경우 생략이 가능하다.
name
속성을 명시하지 않으면 클래스에 정의한 변수 이름대로 테이블이 생성된다. 별도로 이름을 지정해 줄 때는 @Table(name = "테이블 명칭")
으로 표기한다.@Column : @Column
어노테이션은 데이터베이스 테이블 컬럼과 1:1로 매칭된다. @Table
과 동일하게 옵션을 지정하거나 생략할 수 있다.
@GeneratedValue : PK 컬럼의 값을 생성 및 관리하기 위해 @GeneratedValue
어노테이션을 사용한다.
@GeneratedValue(strategy = GenerationType.IDENTITY)
@GeneratedValue(strategy = GenerationType.SEQUENCE
@SequenceGenerator
어노테이션과 함께 사용한다.
- 예시
@Id @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "mySequence") @SequenceGenerator(name = "mySequence",sequenceName = "member_seq", allocationSize = 1) private int id;
@Enumerated : enum 형태로 미리 정의되어 있는 코드나 구분값을 데이터 타입으로 사용하고자 할 때 사용된다.
EnumType.ORDINAL
: enum 객체에 정의된 순서가 컬럼 값으로 사용된다.EnumType.STRING
: enum 문자열 자체가 컬럼 값으로 사용된다.@Transient : Entity 객체에 지정되어 있지만 데이터베이스에 필요없는 속성이라면 @Transient
어노테이션으로 이용하지 않겠다고 정의할 수 있다. Entity 객체에 임시값을 담는 용도로 사용 가능하다.
@EmbeddedId : PK를 단일 @Id
가 아니라 복합키로 정의할 경우 Entity에 직접 정의하지 않고 Serializable을 상속받는 별도의 클래스로 생성한 후 @Embeddable
어노테이션을 붙여 Entity에 삽입 가능함을 명시한다. Entity에서는 @EmbeddedId
어노테이션을 이용해 해당 값을 PK로 사용한다고 지정할 수 있다.
- 간단한 Entity 작성 예시
@Entity public class Member { @Id @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "mySequence") @SequenceGenerator(name = "mySequence",sequenceName = "member_seq", allocationSize = 1) private int id; @Column(name="user_name") private String name; ... }