김영한님이 지음, [자바 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

인텔리제이 프로젝트 생성

[파일]>[새로 만들기]>[새 프로젝트] 메뉴를 선택해 새 프로젝트를 선택한다.

img-name
프로젝트 생성

종속성 설정

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)설정

최종 프로젝트 구조는 아래와 같다.

img-name
프로젝트 구조

객체 매핑

img-name
클래스와 테이블의 매핑

위 그림과 같이 자바 클래스와 테이블을 매핑하기 위해 테스트 데이터베이스와 회원 테이블을 생성한다.

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를 시작할 준비가 끝났다.

JPA 카테고리 내 다른 글 보러가기

댓글남기기