자바 ORM 표준 JPA 프로그래밍 : 교보문고
자바 ORM 표준 JPA 프로그래밍 - 기본편 : 인프런
pom.xml
여태 무지성으로 SpringBoot 에 Gradle 을 사용하여 JPA 의존성을 추가해서 사용했다.
덕분에 JPA 가 어떻게 돌아가는지 관심도 없이 살다 이번 강의를 통해 실행 시켜본다.
다음과 같이 No Build Tools 을 선택해서 진행
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>
hibernate entitymanager : mavenrepository
<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>
JAVA EE 모듈이 Deprecated 되면서 javax/xml/bind 가 포함되지 않기 때문에 의존성을 추가해주어야한다.
JPA를 사용하기 위한 설정 파일
resources/META-INF 에
persistence.xml 파일을 생성한다.
<?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>
하나씩 뜯어보자면
<persistence-unit name="hello">
<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"/>
Dialect
Database 에서 Dialect 는 SQL 표준을 지키지 않은 특정 DB 의 고유 문법이나 함수를 의미한다.
JPA 는 DB에 종속적이지 않게 사용되어야 한다.
하지만 각각의 데이터베이스 마다 다르게 사용하는 문법이나 함수가 존재한다.
JPA 구현체인 Hibernate 에서는 다음과 같은 Dialect 약 40 가지를 지원하고 있다.
<property name="hibernate.show_sql" value="true"/>
<property name="hibernate.format_sql" value="true"/>
<property name="hibernate.use_sql_comments" value="true"/>
Hibernate: select member0_.id as id1_0_, member0_.name as name2_0_ from Member member0_
Hibernate:
select
member0_.id as id1_0_,
member0_.name as name2_0_
from
Member member0_
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 설정 정보와 구현체 설정 정보들이였다.