1. 프로젝트 만들기
IntelliJ로 Maven 프로젝트를 만들었따.
2. Mysql 테이블 생성
책에서는 H2 데이터베이스를 사용하지만 여기서는 Mysql을 사용할 것이다.
create table 'member'(
ID VARCHAR(255) NOT NULL,
NAME VARCHAR(255),
AGE INTEGER NOT NULL,
PRIMARY KEY(ID)
);
3. 라이브러리와 프로젝트 구조
JPA 구현체로 하이버네이트를 사용한다.
JPA를 구현체로 하이버네이트를 사용하기 위한 핵심 라이브러리는 다음과 같다.
- hibernate-core : 하이버네이트 라이브러리
- hibernate-entitymanager : 하이버네이트가 JPA 구현체로 동작하도록 JPA 표준을 구현한 라이브러리( 이것을 라이브러리로 지정하면 다음 중요 라이브러리도 함께 내려받는다.--> hibernate-core.jar 와 hibernate-jpa-2.1-api.jar )
- hibernate-jpa-2.1-api : JPA 2.1 표준 API를 모아둔 라이브러리
4. 메이븐과 사용 라이브러리 관리
메이븐은 간단히 이야기해서 라이브러리를 관리해주는 도구인데 pom.xml에 사용할 라이브러리를 적어주면 라이브러리를 자동으로 내려받아서 관리해준다.
참고)
메이븐(Maven)
최근 자바 애플리케이션은 메이븐과 같은 도구를 사용해서 라이브러리를 관리하고 빌드한다.
메이븐은 크게 라이브러리 관리 기능과 빌드 기능을 제공한다.
-라이브러리 관리 기능
자바 애플리케이션을 개발하려면 jar 파일로 된 여러 라이브러리가 필요하다. 메이븐은 사용할 라이브러리 이름과 버전만 명시하면 라이브러리를 자동으로 내려받고 관리해준다.
-빌드 기능:
애플리케이션을 직접 빌드하는 것은 상당히 고된 작업이다. 과거에는 Ant를 주로 사용했다.
메이븐은 애플리케이션을 빌드하는 표준화된 방법을 제공한다.
5. 객체 매핑 시작
5-1) 회원 클래스 만들기 , 회원 클래스와 회원 테이블을 매핑하기 위한 매핑 어노테이션 추가
package jpabook.start;
import javax.persistence.*; //JPA 어노테이션의 패키지
@Entity
@Table(name="MEMBER")
public class Member {
@Id
@Column(name = "ID")
private String id;
@Column(name = "NAME")
private String username;
private Integer age;
public String getId() {
return id;
}
public void setId(String 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;
}
}
- @Entity : 이 클래스를 테이블과 매핑한다고 JPA에게 알려준다. 이렇게 @Entity가 사용된 클래스를 엔티티 클래스라 한다.
- @Table: 엔티티 클래스에 매핑할 테이블 정보를 알려준다. 여기서는 name속성을 사용해서 member 엔티티를 member 테이블에 매핑했다. 이 어노테이션을 생략하면 클래스 이름을 테이블 이름으로 매칭한다.
- @Id : 엔티티 클래스의 필드를 테이블의 기본 키에 매핑한다. 여기서는 엔티티와 id필드를 테이블의 ID 기본 키 컬럼에 매칭했다. 이렇게 @id가 사용된 필드를 식별자 필드라 한다.
- @Column : 필드를 컬럼에 매핑한다. 여기서는 name 속성을 사용해서 Member 엔티티의 username 필드를 MEMBER 테이블의 NAME 컬럼에 매핑했다.
- 매핑 정보가 없는 필드 : age 필드에는 매핑 어노테이션이 없다. 이렇게 매핑 어노테이션을 생략하면 필드명을 사용해서 컬럼명으로 매핑한다. 여기서는 필드명이 age이므로 age컬럼으로 매핑했다. ( 여기서는 데이터베이스가 대소문자를 구분하지 않는다고 가정한다.)
-JPA의 어노테이션의 패키지는 javax.persistence이다.
6. persisitence.xml 설정
JPA는 persistence.xml을 사용해서 필요한 설정 정보를 관리한다. 이 설정 파일이 META-INF/persistence.xml 클래스 패스 경로에 있으면 별도의 설정 없이 JPA가 인식할 수 있다.
<?xml version="1.0" encoding="UTF-8"?>
<persistence xmlns="http://xmlns.jcp.org/xml/ns/persistence" version="2.1">
<persistence-unit name="jpabook">
<properties>
<!-- 필수 속성 -->
<property name="javax.persistence.jdbc.driver" value="org.h2.Driver"/>
<property name="javax.persistence.jdbc.user" value="sa"/>
<property name="javax.persistence.jdbc.password" value=""/>
<property name="javax.persistence.jdbc.url" value="jdbc:h2:tcp://localhost/~/test"/>
<property name="hibernate.dialect" value="org.hibernate.dialect.H2Dialect" />
<!-- 옵션 -->
<property name="hibernate.show_sql" value="true" />
<property name="hibernate.format_sql" value="true" />
<property name="hibernate.use_sql_comments" value="true" />
<property name="hibernate.id.new_generator_mappings" value="true" />
<!--<property name="hibernate.hbm2ddl.auto" value="create" />-->
</properties>
</persistence-unit>
</persistence>
JPA 설정은 영속성 유닛(persistence-unit)이라는 것부터 시작하는데 일반적으로 연결할 데이터베이스당 하나의 영속성 유닛을 등록한다. (<persistence-unit name="jpabook">)
- 하이버네이트 속성 :hibernate.dialect : 데이터베이스 방언 설정
hibernate로 시작하는 속성은 하이버네이트 전용 속성이므로 하이버네이트에서만 사용할 수 있다.
(SQL 표준을 지키지 않거나 특정 데이터베이스만의 고유한 기능을 JPA에서는 방언이라 한다.)
데이터베이스를 쉽게 교체하기 위해 JPA 구현체들은 다양한 데이터베이스 방언 클래스를 제공한다.
- H2: org.hibernate.dialect.H2Dialect
- 오라클 10g: org.hibernate.dialect.Oracle10gDialect
- MySQL : org.hibernate.dialect.MySQL5InnoDBDialect
'Backend > JPA' 카테고리의 다른 글
[JPA] 여러개의 insert문을 한번에 날릴 수 있을까? (0) | 2022.02.08 |
---|---|
[JPA] 4.엔티티 매핑 (0) | 2021.08.25 |
[JPA] 3. 영속성 관리 (0) | 2021.08.18 |
[JPA] 2-2. 애플리케이션 개발 (0) | 2021.08.04 |
[JPA] 1. JPA란 무엇인가? (1) | 2021.07.01 |