H2 데이터 베이스 설치
Archive Downloads (h2database.com)
Archive Downloads
www.h2database.com
압축 푼 폴더에서 bin/h2.bat를 실행한다.
브라우저에서 아래와 같은 창이 뜬다.

정보는 위와 같아야 한다.
프로젝트 구조

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>jpastudy</artifactId>
<version>1.0-SNAPSHOT</version>
<dependencies>
<!-- h2DataBase -->
<!-- version은 pc에 설치한 h2데이터베이스와 맞춰줘야함!! -->
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<version>1.4.200</version>
</dependency>
<!-- hibernate -->
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-entitymanager</artifactId>
<version>5.6.15.Final</version>
</dependency>
</dependencies>
<properties>
<maven.compiler.source>11</maven.compiler.source>
<maven.compiler.target>11</maven.compiler.target>
</properties>
</project>
객체 매핑
h2에 테이블 생성
create table MEMBER (
ID VARCHAR(255) NOT NULL,
NAME VARCHAR(255),
AGE INTEGER,
PRIMARY KEY (ID)
);

회원 클래스 생성

package jpabook.start;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;
@Entity // 해당 클래스를 테이블과 매핑한다고 JPA에게 알려준다.
@Table(name = "MEMBER") // 엔티티 클래스에 매핑할 테이블 정보를 알려준다.
public class Member {
@Id // 엔티티 클래스의 필드를 테이블의 기본키에 매핑한다.
@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;
}
}
- @Entity
- 해당 클래스를 테이블과 매핑한다고 JPA에게 알려준다.
- @Entity가 사용된 클래스를 엔티티 클래스라고 한다.
- @Table
- 엔티티 클래스에 매핑할 테이블 정보를 알려준다.
- 생략하면 클래스 이름을 테이블 이름으로 매핑한다.
- @Id
- 엔티티 클래스의 필드를 테이블의 기본키에 매핑한다.
- @Id가 사용된 필드를 식별자 필드라 한다.
- @Column
- 필드를 컬럼에 매핑한다.
- 매핑 정보가 없는 필드
- 여기서는 age가 해당된다.
- 매핑 어노테이션을 생략하면 필드명을 사용해서 컬럼명으로 매핑한다.
persistence.xml 설정

설정 파일이 META-INF/persistence.xml 클래스 패스 경로에 있으면 별도의 설정 없이 JPA가 인식할 수 있다.
<?xml version="1.0" encoding="utf-8" ?>
<persistence xmlns="http://xmlns.jcp.org/xml/ns/persistence" version="2.1">
<persistence-unit name="jpastudy">
<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"/>
</properties>
</persistence-unit>
</persistence>
필수 속성의 마지막은 데이터베이스의 방언을 설정하는 것이다.
옵션
- hibernate.show_sql : 하이버네이트가 실행한 SQL을 출력한다.
- hibernate.format_sql : 하이버네이트가 실행한 SQL을 출력할 때 보기 쉽게 정렬한다.
- hibernate.user_sql_comments : 쿼리를 출력할 때 주석도 함께 출력한다.
- hibernate.id.new_generator_mapping : JPA 표준에 맞춘 새로운 키 생성 전략을 사용한다.
애플리케이션 개발

package jpabook.start;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.EntityTransaction;
import javax.persistence.Persistence;
import java.util.List;
public class JpaMain {
public static void main(String[] args) {
// 엔티티 매니저 팩토리 생성
EntityManagerFactory emf = Persistence.createEntityManagerFactory("jpastudy");
// 엔티티 매니저 생성
EntityManager em = emf.createEntityManager();
// 트랜잭션 획득
EntityTransaction tx = em.getTransaction(); // 트랜잭션 API
try {
tx.begin(); // 트랜잭션 시작
logic(em); // 비즈니스 로직 실행
tx.commit(); // 트랜잭션 커밋
} catch (Exception e) {
tx.rollback(); // 트랜잭션 롤백
} finally {
em.close(); // 엔티티 매니저 종료
}
emf.close();; // 엔티티 매니저 팩토리 종료
}
// 비즈니스 로직
private static void logic(EntityManager em) {
String id = "id1";
Member member = new Member();
member.setId(id);
member.setUsername("지한");
member.setAge(2);
// 등록
em.persist(member);
// 수정
member.setAge(20);
// 한 건 조회
Member findMember = em.find(Member.class, id);
System.out.println("findMember=" + findMember.getUsername() + ", age=" + findMember.getAge());
// 목록 조회
List<Member> members = em.createQuery("select m from Member m", Member.class).getResultList();
System.out.println("member.size=" + members.size());
// 삭제
em.remove(member);
}
}
엔티티 매니저 팩토리 생성
JPA를 시작하려면 persistence.xml의 설정 정보를 사용해서 엔티티 매니저 팩토리를 생성해야 한다.
엔티티 매니저 생성
JPA의 기능 대부분은 엔티티 매니저가 제공한다. 엔티티 매니저를 사용해서 엔티티를 데이터베이스에 등록/수정/삭제/조회할 수 있다.
엔티티 매니저는 데이터베이스 커넥션과 밀접한 관계가 있으므로 스레드 간에 공유하거나 재사용하면 안 된다.

'JPA' 카테고리의 다른 글
다양한 연관관계 매핑 (0) | 2023.04.13 |
---|---|
연관관계 매핑 기초 (0) | 2023.04.12 |
엔티티 매핑 (0) | 2023.04.11 |
H2 데이터 베이스 설치
Archive Downloads (h2database.com)
Archive Downloads
www.h2database.com
압축 푼 폴더에서 bin/h2.bat를 실행한다.
브라우저에서 아래와 같은 창이 뜬다.

정보는 위와 같아야 한다.
프로젝트 구조

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>jpastudy</artifactId>
<version>1.0-SNAPSHOT</version>
<dependencies>
<!-- h2DataBase -->
<!-- version은 pc에 설치한 h2데이터베이스와 맞춰줘야함!! -->
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<version>1.4.200</version>
</dependency>
<!-- hibernate -->
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-entitymanager</artifactId>
<version>5.6.15.Final</version>
</dependency>
</dependencies>
<properties>
<maven.compiler.source>11</maven.compiler.source>
<maven.compiler.target>11</maven.compiler.target>
</properties>
</project>
객체 매핑
h2에 테이블 생성
create table MEMBER (
ID VARCHAR(255) NOT NULL,
NAME VARCHAR(255),
AGE INTEGER,
PRIMARY KEY (ID)
);

회원 클래스 생성

package jpabook.start;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;
@Entity // 해당 클래스를 테이블과 매핑한다고 JPA에게 알려준다.
@Table(name = "MEMBER") // 엔티티 클래스에 매핑할 테이블 정보를 알려준다.
public class Member {
@Id // 엔티티 클래스의 필드를 테이블의 기본키에 매핑한다.
@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;
}
}
- @Entity
- 해당 클래스를 테이블과 매핑한다고 JPA에게 알려준다.
- @Entity가 사용된 클래스를 엔티티 클래스라고 한다.
- @Table
- 엔티티 클래스에 매핑할 테이블 정보를 알려준다.
- 생략하면 클래스 이름을 테이블 이름으로 매핑한다.
- @Id
- 엔티티 클래스의 필드를 테이블의 기본키에 매핑한다.
- @Id가 사용된 필드를 식별자 필드라 한다.
- @Column
- 필드를 컬럼에 매핑한다.
- 매핑 정보가 없는 필드
- 여기서는 age가 해당된다.
- 매핑 어노테이션을 생략하면 필드명을 사용해서 컬럼명으로 매핑한다.
persistence.xml 설정

설정 파일이 META-INF/persistence.xml 클래스 패스 경로에 있으면 별도의 설정 없이 JPA가 인식할 수 있다.
<?xml version="1.0" encoding="utf-8" ?>
<persistence xmlns="http://xmlns.jcp.org/xml/ns/persistence" version="2.1">
<persistence-unit name="jpastudy">
<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"/>
</properties>
</persistence-unit>
</persistence>
필수 속성의 마지막은 데이터베이스의 방언을 설정하는 것이다.
옵션
- hibernate.show_sql : 하이버네이트가 실행한 SQL을 출력한다.
- hibernate.format_sql : 하이버네이트가 실행한 SQL을 출력할 때 보기 쉽게 정렬한다.
- hibernate.user_sql_comments : 쿼리를 출력할 때 주석도 함께 출력한다.
- hibernate.id.new_generator_mapping : JPA 표준에 맞춘 새로운 키 생성 전략을 사용한다.
애플리케이션 개발

package jpabook.start;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.EntityTransaction;
import javax.persistence.Persistence;
import java.util.List;
public class JpaMain {
public static void main(String[] args) {
// 엔티티 매니저 팩토리 생성
EntityManagerFactory emf = Persistence.createEntityManagerFactory("jpastudy");
// 엔티티 매니저 생성
EntityManager em = emf.createEntityManager();
// 트랜잭션 획득
EntityTransaction tx = em.getTransaction(); // 트랜잭션 API
try {
tx.begin(); // 트랜잭션 시작
logic(em); // 비즈니스 로직 실행
tx.commit(); // 트랜잭션 커밋
} catch (Exception e) {
tx.rollback(); // 트랜잭션 롤백
} finally {
em.close(); // 엔티티 매니저 종료
}
emf.close();; // 엔티티 매니저 팩토리 종료
}
// 비즈니스 로직
private static void logic(EntityManager em) {
String id = "id1";
Member member = new Member();
member.setId(id);
member.setUsername("지한");
member.setAge(2);
// 등록
em.persist(member);
// 수정
member.setAge(20);
// 한 건 조회
Member findMember = em.find(Member.class, id);
System.out.println("findMember=" + findMember.getUsername() + ", age=" + findMember.getAge());
// 목록 조회
List<Member> members = em.createQuery("select m from Member m", Member.class).getResultList();
System.out.println("member.size=" + members.size());
// 삭제
em.remove(member);
}
}
엔티티 매니저 팩토리 생성
JPA를 시작하려면 persistence.xml의 설정 정보를 사용해서 엔티티 매니저 팩토리를 생성해야 한다.
엔티티 매니저 생성
JPA의 기능 대부분은 엔티티 매니저가 제공한다. 엔티티 매니저를 사용해서 엔티티를 데이터베이스에 등록/수정/삭제/조회할 수 있다.
엔티티 매니저는 데이터베이스 커넥션과 밀접한 관계가 있으므로 스레드 간에 공유하거나 재사용하면 안 된다.

'JPA' 카테고리의 다른 글
다양한 연관관계 매핑 (0) | 2023.04.13 |
---|---|
연관관계 매핑 기초 (0) | 2023.04.12 |
엔티티 매핑 (0) | 2023.04.11 |