본문 바로가기
Delvelopment/JPA

JPA 프로젝트 셋팅. (JPA, Spring-boot, H2 Database), persistence.xml 설정

by 제제킴 2019. 12. 15.
반응형

약 16개월전 JPA (하이버네이트)로 구축되어있는 프로젝트에 약 3주간 참여했던적이 있었다.

 

그때는 모든게 새로웠고 이미 구축된 프로젝트였기 때문에 기존 소스를 활용해 개발하기 급급했다.

 

지금 다시 JPA를 본격적으로 프로젝트 셋팅부터 시작하려한다.

 

책은 김영한님이 작성하신 자바 ORM 표준 JPA 프로그래밍 으로 공부를 진행한다.

(나는 인텔리제이로 사용하니 다른 분들과 조금 다를 수 있다.)

 

프로젝트 셋팅 시작.

 

JPA 와 H2 데이터 베이스, 스프링 부트를 활용해 pom.xml 를 셋팅한다.

 

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>org.example</groupId>
    <artifactId>jpa_ch02</artifactId>
    <version>1.0-SNAPSHOT</version>


    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.1.RELEASE</version>
    </parent>

    <properties>

        <!-- 기본 설정 -->
        <java.version>1.8</java.version>
        <!-- 프로젝트 코드 인코딩 설정 -->
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>

        <!-- JPA, 하이버네이트 버전 -->
        <hibernate.version>4.3.10.Final</hibernate.version>
        <!-- 데이터베이스 버전 -->
        <h2db.version>1.4.187</h2db.version>

    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <!-- JPA, 하이버네이트 -->
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-entitymanager</artifactId>
            <version>${hibernate.version}</version>
        </dependency>
        <!-- H2 데이터베이스 -->
        <dependency>
            <groupId>com.h2database</groupId>
            <artifactId>h2</artifactId>
            <version>${h2db.version}</version>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.1</version>
                <configuration>
                    <source>${java.version}</source>
                    <target>${java.version}</target>
                </configuration>
            </plugin>

        </plugins>
    </build>




</project>

 

(resources / META-INF / )

persistence.xml

<?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>

 

필수 속성....

 

  • <persistence-unit name="jpabook">
    --> JPA 설정은 영속성 유닛 (persistence-unit) 이라는 것부터 시작한다. 
    --> 일반적으로 연결할 데이터베이스당 하나의 영속성 유닛을 등록한다.
    --> 영속성 유닛에는 고유한 이름을 부여하는데 그 이름이 "jpabook" 이다.

JPA 표준 속성

  • <property name="javax.persistence.jdbc.driver" value="org.h2.Driver"/>
    --> JDBC 드라이버.
  • <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"/>
    --> 데이터베이스 접속 URL

하이버네이트 속성

  • <property name="hibernate.dialect" value="org.hibernate.dialect.H2Dialect" />
    --> 데이터베이스 방언(Dialect) 설정
    --> 하이버네이트 전용 속성 설정으로 하이버네이트에서만 사용할 수 있다. 

 

데이터베이스 방언.

JPA는 특정 데이터베이스에 종속적이지 않은 기술이다. 따라서 다른 데이터베이스로 손쉽게 교체할 수 있다.

그러나, 각 데이터베이스가 제가오하는 SQL문법과 함수가 조금씩 다르다.

 

- 데이터 타입 : 가변 문자 타입으로 Mysql ( VARCHAR ), ORACLE ( CARCHAR2 )

- 다른 함수명 : Mysql (SUBSTRING() , ORACLE ( SUBSTR() )

- 페이징 처리 : Mysql ( LIMIT ) , ORACLE ( ROWNUM )

 

위와 같은 문제를 해결하려고 다양한 데이터베이스 방언 클래스를 사용한다. ( hibernate.dialect.* )

ex) 

H2  -org.hibernate.dialect.H2Dialect

오라클10g - org.hibernate.dialect.Oracle10gDialect

MySQL - org.hibernate.dialect.MySQL5InnoDBDialect

 

 

<!-- 옵션 -->
<property name="hibernate.show_sql" value="true" />

--> 하이버네이트가 실행한 SQL을 출력한다
<property name="hibernate.format_sql" value="true" />

--> 하이버네이트가 실행한 SQL을 출력할 때 보기 쉽게 정렬한다.
<property name="hibernate.use_sql_comments" value="true" />

--> 쿼리를 출력할 때 주석도 함께 출력한다.
<property name="hibernate.id.new_generator_mappings" value="true" />

--> JPA 표준에 맞춘 새로운 키 생성 전략을 사용한다.

반응형

댓글