김영한님이 지음, [자바 ORM 표준 JPA 프로그래밍] 책을 읽고 정리한 필기입니다.📢
JPA 시작하기
MariaDB 설치 - macOS
macOS에서 MariaDB를 설치하는 가장 쉬운 방법은 homebrew를 통해 설치하는 것이다. 여기를 참고하여 homebrew를 설치한다.
Homebrew 설치 후에는 MariaDB Server 는 다음과 같이 설치 가능하다.
1
brew install mariadb
설치 후에는 다음으로 MariaDB Server를 시작한다.
1
mysql.server start
💡Tip.
시스템 시작 시 MariaDB Server 가 자동 시작하려면 다음과 같이 Homebrew 서비스 기능을 사용한다. 이 서비스 기능은 launchd 의 launchctl 유틸리티를 이용한다.
1 brew services start mariadb
인텔리제이 프로젝트 생성
[파일]>[새로 만들기]>[새 프로젝트] 메뉴를 선택해 새 프로젝트를 선택한다.
프로젝트 생성
종속성 설정
JPA를 사용하기 위해서는 hibranate 종속성이 필요하고, MariaDB 로 테스트를 진행하기위해 mariadb.jdbc 를 pom.xml
에 추가한다.
(gradle 프로젝트일 경우에는 build.gradle에 추가)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.example</groupId>
<artifactId>hello-jpa</artifactId>
<version>1.0-SNAPSHOT</version>
.. 중략 ...
<dependencies>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-entitymanager</artifactId>
<version>5.6.14.Final</version>
</dependency>
<dependency>
<groupId>org.mariadb.jdbc</groupId>
<artifactId>mariadb-java-client</artifactId>
<version>3.0.6</version>
</dependency>
</dependencies>
</project>
Persistence.xml 설정
프로젝트가 생성 되었다면 JPA는 persistence.xml을 사용해서 필요한 설정 정보를 관리한다. JPA가 MariaDB에 접속할 수 있도록 아래와 같이 META-INF/ 폴더 하위에 persistence.xml 파일을 생성하고 데이터베이스 사용자와 비밀번호를 입력한다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?xml version="1.0" encoding="UTF-8"?>
<persistence xmlns="http://xmlns.jcp.org/xml/ns/persistence" version="2.1">
<persistence-unit name="jpatjpa">
<properties>
<!--필수 속성-->
<property name="javax.persistence.jdbc.driver" value="org.mariadb.jdbc.Driver"/>
<property name="javax.persistence.jdbc.user" value="{DB유저명}"/>
<property name="javax.persistence.jdbc.password" value="{DB비밀번호}"/>
<property name="javax.persistence.jdbc.url" value="jdbc:mariadb://localhost:3306/JPA_TEST"/>
<property name="hibernate.dialect" value="org.hibernate.dialect.MariaDBDialect"/>
<!--옵션-->
<property name="hibernate.show_sql" value="true"/>
<property name="hibernate.format_sql" value="true"/>
<property name="hibernate.use_sql_comments" value="true"/>
</properties>
</persistence-unit>
</persistence>
persistence
: XML 네임스페이스와 사용할 JPA버전 명시persistence-unit
- 일반적으로 연결할 데이터베이스당 하나의 영속성 유닛(Persistence-unit)을 등록
- 영속성 유닛에는 고유한 이름을 부여해야 함(
hellojpa
)
- 프로퍼티 속성
- JPA 표준 속성
javax.persistence.jdbc.driver
: JDBC 드라이버javax.persistence.jdbc.user
: 데이터베이스 접속 아이디javax.persistence.jdbc.password
: 데이터베이스 접속 비밀번호javax.persistence.jdbc.url
: 데이터베이스 접속 URL
- 하이버네이트 속성
hibernate.show_sql
: 하이버네이트가 실행한 SQL을 출력하는 설정hibernate.format_sql
: 하이버네이트가 실행한 SQL을 출력할 때 정렬 여부를 설정hibernate.dialect
: 데이터베이스 방언(Dialect)설정
- JPA 표준 속성
최종 프로젝트 구조는 아래와 같다.
프로젝트 구조
객체 매핑
클래스와 테이블의 매핑
위 그림과 같이 자바 클래스와 테이블을 매핑하기 위해 테스트 데이터베이스와 회원 테이블을 생성한다.
1
2
3
4
5
6
7
8
CREATE DATABASE JPA_TEST;
CREATE TABLE MEMBER
(
ID VARCHAR(255) NOT NULL,
NAME VARCHAR(255),
AGE INT,
PRIMARY KEY (ID)
);
회원 클래스 파일 생성한다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
package org.example;
import javax.persistence.*;
@Entity
@Table(name="MEMBER")
public class Member {
public Member(){
}
@Id
@Column(name = "ID")
private String id;
@Column(name = "NAME")
private String username;
//매핑 정보가 없는 필드
private Integer age;
//Getter, Setter
public String getId() {
return this.id;
}
public void setId(String id){
this.id = id;
}
public String getUsername() {
return this.username;
}
public void setUsername(String username){
this.username = username;
}
public Integer getAge(){
return this.age;
}
public void setAge(Integer age){
this.age = age;
}
}
@Entity
- 이 클래스를 테이블과 패밍한다고 JPA에게 알려주는 어노테이션
@Entity
가 사용된 클래스를 엔티티 클래스라 부름
@Table
- 엔티티 클래스에 패밍할 테이블 정보를 JPA에게 알려주는 어노테이션
- 생략 시 클래스 이름을 테이블 이름으로 매핑
@Id
- 엔티티 클래스의 필드를 테이블의 기본 키(Primary Key)에 매핑하는 어노테이션
@Id
가 사용된 필드를 식별자 필드라 함
@Column
- 필드를 컬럼에 매핑하는 어노테이션
- 생략 시 필드명을 사용하여 컬럼명으로 매핑
이제 JPA를 시작할 준비가 끝났다.
댓글남기기