728x90
01. H2 데이터베이스 설치 & 실행
H2 소개
최고의 실습용 DB로, 가볍고, 웹용 쿼리툴을 제공한다. MySQL, Oracle 데이터베이스 시뮬레이션, 시퀀스, AUTO INCREMENT 등의 기능을 제공한다.
H2 설치
- https://www.h2database.com/html/main.html 에서 [Download] 탭 - [Archive Downloads] 에서 원하는 버전으로 다운 받으면 된다. (나는 2.1.214 버전을 다운 받았다.)
02. Maven
Maven 소개
- https://maven.apache.org/ (공식 홈페이지)
소프트웨어 프로젝트 관리 및 이해 도구로, 프로젝트 개체 모델(POM)의 개념을 기반으로 Maven은 중앙 정보에서 프로젝트의 빌드, 보고 및 문서를 관리할 수 있다.
- 자바 라이브러리로, 빌드를 관리한다.
- 라이브러리를 자동 다운로드하고, 의존성을 관리한다.
- 최근에는 Gradle이 유명해지고 있는 추세이다.
03. 프로젝트 생성
자바 : 자바 8 이상 (8을 권장했지만 나는 11을 사용했다.)
Maven 설정 : groupId 는 jpa-basic, artifactId 는 ex1-hello-jpa 로 했다.
라이브러리 추가 - pom.xml
- pom.xml 파일에 다음과 같은 코드를 넣는다.
- H2 데이터베이스의 version 은 위에서 설치한 H2 데이터베이스와 버전을 일치시킨다.
- 추가한 부분이라고 작성한 두 부분은 내가 자바 11 버전을 사용해서 그런지 오류가 발생하여 구글링해서 오류를 해결하기 위해 넣은 코드이다. (https://www.inflearn.com/questions/13985/java11-javax-xml-bind-jaxbexception-%EC%97%90%EB%9F%AC 를 참고하였다.)
<?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>jpa-basic</groupId>
<artifactId>ex1-hello-jpa</artifactId>
<version>1.0.0</version>
<dependencies>
<!-- JPA 하이버네이트 -->
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-entitymanager</artifactId>
<version>5.3.10.Final</version>
</dependency>
<!-- H2 데이터베이스 -->
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<version>2.1.214</version>
</dependency>
<!-- 추가한 부분1 -->
<dependency>
<groupId>javax.xml.bind</groupId>
<artifactId>jaxb-api</artifactId>
<version>2.3.1</version>
</dependency>
</dependencies>
<!-- 추가한 부분2 -->
<properties>
<maven.compiler.source>11</maven.compiler.source>
<maven.compiler.target>11</maven.compiler.target>
</properties>
</project>
JPA 설정하기 - persistence.xml
- persistence.xml은 JPA 설정 파일이다.
- 반드시 resources/META-INF 하위에 존재해야 한다.
- persistence-unit name 으로 이름을 지정하며 이것을 이용해 DB에 접근한다. (여기서는 hello로 지정했다.)
- 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.hbm2ddl.auto" value="create" />-->
</properties>
</persistence-unit>
</persistence>
04. 데이터베이스 방언
JPA는 특정 데이터베이스에 종속되지 않는다.
각각의 데이터베이스가 제공하는 SQL 문법과 함수는 조금씩 다르다.
- 가변 문자의 경우, MySQL은 VARCHAR, Oracle은 VARCHAR2 이다.
- 문자열 자르는 함수의 경우, SQL 표준은 SUBSTRING(), Oracle은 SUBSTR() 이다.
- 페이징의 경우, MySQL은 LIMIT, Oracle은 ROWNUM 이다.
방언
- 방언이란 SQL 표준을 지키지 않는 특정 데이터베이스만의 고유한 기능이다.
- JPA는 Dialect를 사용한다. MySQL DB를 사용하고 싶으면 MySQLDialect를, Oracle DB를 사용하고 싶으면 OracleDialect를, H2를 사용하고 싶으면 H2Dialect를 사용하면 된다.
- hibernate.dialect 속성에 방언을 지정하면 된다.
- hibernate는 40가지 이상의 데이터베이스 방언을 지원한다.
프로젝트 생성 시 추가적인 오류가 발생한다면, 자신이 사용하는 자바 버전이 모두 동일하게 설정되었는지 확인해야 한다.
728x90