Maven 환경에서 JPA 사용하기

XingXi·2023년 12월 26일
0

JPA

목록 보기
4/23
post-thumbnail

🍕 Reference

자바 ORM 표준 JPA 프로그래밍 : 교보문고
자바 ORM 표준 JPA 프로그래밍 - 기본편 : 인프런
pom.xml

Java Maven 빌드에서 JPA 사용해 보기

여태 무지성으로 SpringBoot 에 Gradle 을 사용하여 JPA 의존성을 추가해서 사용했다.
덕분에 JPA 가 어떻게 돌아가는지 관심도 없이 살다 이번 강의를 통해 실행 시켜본다.

🚀 1. Project 생성

VSCode


다음과 같이 No Build Tools 을 선택해서 진행

Intellij

프로젝트를 정상적으로 생성한 모습


🚀 2. pom.xml 작성

pom.xml

Project OBject Model 을 설정하는 부분 즉 Maven 빌드 툴의 빌드 옵션을 설정하는 부분이다.
Maven 이 Java 프로젝트를 관리하는 툴이기 때문에 xml 에 의존성을 추가하여
라이브러리를 자동으로 다운로드 받는다.

해당 Application 은 JPA 에 대해서 알아보기 위함으로 JPA 의존성을 추가한다.

<?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-version1</artifactId>
    <version>1.0-SNAPSHOT</version>

    <properties>
        <maven.compiler.source>17</maven.compiler.source>
        <maven.compiler.target>17</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>

    <dependencies>

        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-entitymanager</artifactId>
            <version>5.3.10.Final</version>
        </dependency>

        <dependency>
            <groupId>com.h2database</groupId>
            <artifactId>h2</artifactId>
            <version>1.4.199</version>
        </dependency>

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

    </dependencies>

</project>

1. hibernate 의존성 추가

hibernate entitymanager : mavenrepository

        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-entitymanager</artifactId>
            <version>5.3.10.Final</version>
        </dependency>

2. h2 의존성 추가

h2 database : mavenrepository

        <dependency>
            <groupId>com.h2database</groupId>
            <artifactId>h2</artifactId>
            <version>1.4.199</version>
        </dependency>

3. java 8 버전 이상 xml 읽기 위한 의존성 추가

xml reader : mavenrepository

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

JAVA EE 모듈이 Deprecated 되면서 javax/xml/bind 가 포함되지 않기 때문에 의존성을 추가해주어야한다.

Maven 으로 빌드 후 의존성이 추가 되었는지 확인한다


🚀 3.persistence.xml 을 작성한다.

JPA를 사용하기 위한 설정 파일
resources/META-INF
persistence.xml 파일을 생성한다.

  • META-INF 는 Java 패키징 기술인 jar 의 일부이며 Java Application 설정 파일을 저장하는 디렉토리이다.
    -> 나중에 자세히 알아보도록 하자
<?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>
            <!-- JDBC 필수정보 -->
            <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"/> <!-- H2 방언을 사용함을 명시 -->

            <!-- 추가 옵션정보 -->
            <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>

하나씩 뜯어보자면

1. persistence-unit name="hello"

  • JPA 의 EntityManagerFactory 를 생성할 때 필요한 정보임을 명시.
<persistence-unit name="hello">

2. javax~

            <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"/>
  • 자바에서 지원하는 속성이며 Application 과 연결시 필요한 정보들

3. hibernate.dialect

<property name="hibernate.dialect" value="org.hibernate.dialect.H2Dialect"/>

Dialect
Database 에서 Dialect 는 SQL 표준을 지키지 않은 특정 DB 의 고유 문법이나 함수를 의미한다.
JPA 는 DB에 종속적이지 않게 사용되어야 한다.
하지만 각각의 데이터베이스 마다 다르게 사용하는 문법이나 함수가 존재한다.
JPA 구현체인 Hibernate 에서는 다음과 같은 Dialect 약 40 가지를 지원하고 있다.

4. hiberante,.show, format, use~

            <property name="hibernate.show_sql" value="true"/> 
            <property name="hibernate.format_sql" value="true"/>
            <property name="hibernate.use_sql_comments" value="true"/> 

1. show_sql

Hibernate: select member0_.id as id1_0_, member0_.name as name2_0_ from Member member0_

  • application 에서 DB 조작을 위한 Query 를 보여주는 설정

2. format_sql

Hibernate: 
    select
        member0_.id as id1_0_,
        member0_.name as name2_0_ 
    from
        Member member0_

  • 위의 설정이 활성화 되었을때 Query를 정렬해주는 설정

3. use_sql_comments

Hibernate: 
    /* select
        m 
    from
        Member as m */ select
            member0_.id as id1_0_,
            member0_.name as name2_0_ 
        from
            Member member0_

  • 콘솔에 표시되는 쿼리문 위에 어떤 실행을 하는지 표시

persistence.xml 파일의 속성들은 SpringBoot 에서 무지성으로
작성했던 DB 설정 정보와 구현체 설정 정보들이였다.

0개의 댓글