티스토리 뷰

Backend/JPA

[JPA] 02. 설정 및 구동 방식

This2sho 2022. 1. 18. 19:57

해당 글은 김영한님의 자바 ORM 표준 JPA 프로그래밍 - 기본편 - 인프런 | 강의를 수강하고 정리한 게시글입니다.

JPA 설정하기

강의에서 사용하는데로 자바 8이상(11사용), 메이븐으로 설정후 생성

라이브러리 추가

[pom.xml]

<?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>hellojpa</groupId>
    <artifactId>jpql</artifactId>
    <version>1.0-SNAPSHOT</version>

    <properties>
        <maven.compiler.source>11</maven.compiler.source>
        <maven.compiler.target>11</maven.compiler.target>
    </properties>

    <dependencies>
        <!-- JPA 하이버네이트 -->
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-entitymanager</artifactId>
            <version>5.4.22.Final</version>
        </dependency>
        <!-- H2 데이터베이스 -->
        <dependency>
            <groupId>com.h2database</groupId>
            <artifactId>h2</artifactId>
            <version>1.4.200</version>
        </dependency>

        <dependency>
            <groupId>javax.xml.bind</groupId>
            <artifactId>jaxb-api</artifactId>
            <version>2.3.0</version>
        </dependency>
    </dependencies>
</project>

[persistence.xml]

  • JPA 설정 파일
  • 프로젝트의 resources 밑에 "META-INF" Directory 생성 후 persistence.xml로 파일생성
  • persistence-unit name으로 이름 지정
  • javax.persistence로 시작: JPA 표준 속성
  • hibernate로 시작: 하이버네이트 전용 속성
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.2"
             xmlns="http://xmlns.jcp.org/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_2.xsd">
    <persistence-unit name="hello">
        <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.jdbc.batch_size" value="10"/>
            <property name="hibernate.hbm2ddl.auto" value="create" />
            <property name="hibernate.default_batch_fetch_size" value="100" />

        </properties>
    </persistence-unit>
</persistence>

데이터베이스 방언

  • JPA는 특정 데이터베이스에 종속 X
  • 각각의 데이터베이스가 제공하는 SQL 문법과 함수는 조금씩 다름
    • 가변 문자: MySQL은 VARCHAR, Oracle은 VARCHAR2
    • 문자열을 자르는 함수: SQL 표준은 SUBSTRING(), Oracle은 SUBSTR()
    • 페이징: MySQL은 LIMIT , Oracle은 ROWNUM
  • 방언: SQL 표준을 지키지 않는 특정 데이터베이스만의 고유한 기능

  • hibernate.dialect 속성에 지정
    • H2 : org.hibernate.dialect.H2Dialect
    • Oracle 10g : org.hibernate.dialect.Oracle10gDialect
    • MySQL : org.hibernate.dialect.MySQL5InnoDBDialect
  • 하이버네이트는 40가지 이상의 데이터베이스 방언 지원

JPA 구동 방식

객체와 테이블을 생성하고 매핑하기

  • @Entity : JPA가 관리할 객체
  • @Id : 데이터베이스 PK와 매핑
package hellojpa;
import javax.persistence.Entity;
import javax.persistence.Id;

@Entity 
public class Member {

    @Id 
    private Long id;
    private String name;
} 

(자동생성 쿼리)

create table Member ( 
    id bigint not null,
    name varchar(255), 
    primary key (id) 
); 

주의사항

  • 엔티티 매니저 팩토리는 하나만 생성해서 애플리케이션 전체에서 공유할 것
  • 엔티티 매니저는 쓰레드간에 공유X (사용하고 버려야됨)
  • JPA의 모든 데이터 변경은 트랜잭션 안에서 실행

'Backend > JPA' 카테고리의 다른 글

[JPA] 06. 고급 매핑 (상속관계 매핑)  (0) 2022.01.22
[JPA] 05. 다양한 연관관계 매핑  (0) 2022.01.21
[JPA] 04. 엔티티 매핑  (0) 2022.01.20
[JPA] 03. 영속성 관리  (0) 2022.01.19
[JPA] 01. JPA 란?  (0) 2022.01.17
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/05   »
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
글 보관함