H2 Database Engine
H2 Database Engine Welcome to H2, the Java SQL database. The main features of H2 are: Very fast, open source, JDBC API Embedded and server modes; in-memory databases Browser based Console application Small footprint: around 2.5 MB jar file size Supp
www.h2database.com
2.예제 테이블 생성
CREATE TABLE MEMBER(
ID VARCHAR(255) NOT NULL, -- 아이디(PK)
NAME VARCHAR(255), -- 이름
AGE INTEGER NOT NULL, -- 나이
PRIMARY KEY(ID)
)
3.메이븐 설정 파일 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_practice</artifactId>
<version>1.0-SNAPSHOT</version>
<dependencies>
<!-- JPA, 하이버네이트 -->
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-entitymanager</artifactId>
<version>4.3.10.Final</version>
</dependency>
<!-- h2 데이터베이스 -->
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<version>1.4.187</version>
</dependency>
</dependencies>
</project>
4.회원 클래스 생성
public class Member {
private String id; //아이디
private String username; //이름
private Integer age; //나이
//Getter,Setter
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
}
5.JPA 매핑
@Entity
이 클래스를 테이블과 매핑한다고 JPA에게 알려준다.
@Table
엔티티 클래스에 매핑할 테이블 정보를 알려준다.
여기서는 name 속성을 사용해서 Member 엔티티를 MEMBER 테이블에 매핑했다. 이 어노테이션을 생략하면 클래스 이름을 테이블 이름으로 매핑한다.
@Id
엔티티 클래스의 필드를 테이블의 기본 키에 매핑한다.
@Column
필드를 컬럼에 매핑한다.
@Entity
@Table(name = "MEMBER")
public class Member {
@Id // pk
@Column(name = "ID")
private String id; //아이디
@Column(name = "NAME")
private String username; //이름
private Integer age; //나이
//Getter,Setter
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
}
6.persistence.xml 설정
파일 경로 : resources/META-INF/persistence.xml
<?xml version="1.0" encoding="UTF-8" ?>
<persistence version="2.1"
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-unit name="jpa_practice">
<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.new_generator_mappings" value="true"/>
</properties>
</persistence-unit>
</persistence>
JPA는 persistence.xml을 사용해서 필요한 설정 정보를 관리한다.
이 설정 파일이 resources/META-INF/ 의 경로에 있으면 별도의 설정 없이 JPA가 인식할 수 있다.
JPA 설정은 영속성 유닛(persistence-unit) 이라는 것부터 시작하는데 일반적으로 연결할 데이터베이스당 하나의 영속성 유닛을 등록한다.
영속성 유닛에는 고유한 이름을 부여해야 한다.
JPA 표준속성
javax.persistence.jdbc.driver: JDBC 드라이버
javax.persistence.jdbc.user: 데이터베이스 접속 아이디
javax.persistence.jdbc.password: 데이터베이스 접속 비밀번호
javax.persistence.jdbc.url: 데이터베이스 접속 url
하이버네이트 속성
hibernate.dialect: 데이터베이스 방언(dialect) 설정
hibernate.show_sql: 하이버네이트가 실행한 SQL을 출력한다.
hibernate.format_sql: 하이버네이트가 실행한 SQL을 출력할 때 보기 쉽게 정렬한다.
hibernate.use_sql_comments: 쿼리를 출력할 때 주석도 함께 출력한다.
hibernate.id.new_generator_mappings: JPA 표준에 맞춘 새로운 키 생성 전략을 사용한다.
데이터베이스 방언
JPA는 특정 데이터베이스에 종속적이지 않은 기술이다. 따라서 다른 데이터베이스로 손쉽게 교체할 수 있다. 그런데 각 데이터베이스가 제공하는 SQL 문법과 함수가 조금씩 다르다는 문제가 있다.
SQL 표준을 지키지 않거나 특정 데이터베이스만의 고유한 기능을 JPA에서는 방언이라 한다.
특정 데이터베이스에 의존적인 SQL은 데이터베이스 방언이 처리해준다. 따라서 데이터베이스가 변경되어도 애플리케이션 코드를 변경할 필요 없이 데이터베이스 방언만 교체하면 된다.
'스프링 > JPA' 카테고리의 다른 글
3.JPA 시작(2) (1) | 2023.12.27 |
---|---|
1.JPA란 무엇인가? (2) | 2023.12.26 |
댓글