1. JPA 설정하기 - persistence.xml
- /META-INF/persistence.xml에 위치한다.
- persistence-unit name으로 이름을 지정한다.
- javax.persistence로 시작하여 JPA 표준 속성을 지정한다.
- hibernate로 시작하여 하이버네이트 전용 속성을 지정한다.
- hibernate.dialect의 value 값에는 사용하려는 DB에 맞춰서 작성한다.
<?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>
2. JPA 의 여러 DB 사용
- JPA는 특정 데이터베이스에 종속하지 않다.
- 각각의 데이터베이스가 제공하는 SQL 문법과 함수가 조금씩 다르지만 SQL 표준을 지키지 않아도 특정 데이터베이스만의 고유한 기능을 사용할 수 있다.
- 가변 문자 : MySQL은 VARCHAR, Oracle은 VARCHAR2
- 문자열을 자르는 함수 : SQL 표준은 SUBSTRING(), Oracle은 SUBSTR()
- 페이징 처리 : MySQL은 LIMIT, Oracle은 ROWNUM
- hibernate.dialect 속성에 DB를 지정하며 하이버네이트는 40가지 이상의 DB를 지원한다.
- H2 : org.hibernate.dialect.H2Dialect
- Oralce 10g : org.hibernate.dialect.Oracle10gDialect
- MySQL : org.hibernate.dialect.MySQL5InnoDBDialect
3. JPA 의 구동 방식
- 설정정보를 기준으로 EntityManagerFactory를 생성한다.
- EntityManagerFactory는 하나만 생성해 애플리케이션 전체에 공유한다.
- EntityManagerFactory에 의해서 EntityManager가 생성되고 관리된다.
- EntityManager는 쓰레드간 공유하지 않고 사용 후에 버려야 한다.
- JPA의 모든 데이터의 변경은 트랜잭션 안에서만 실행한다.
트랜잭션이란?
트랜잭션은 데이터베이스의 상태를 변화시키기 위해서 수행하는 작업의 단위를 뜻한다.
예를 들어 게시판에 게시글을 작성하고 다시 게시판에 들어가면 최근에 작성된 글이 함께 보여야 한다. 이때 데이터베이스 작업으로 봤을 때 작성글을 Insert하고 게시판을 구성할 데이터를 다시 Select하여 최신 정보를 유저에게 보여준다. 여기서 작업의 단위는 insert와 select 문 둘 다를 합친 것이며 이러한 작업의 단위를 하나의 트랜잭션이라고 한다.
트랜잭션은 4가지(원자성, 일관성, 독립성, 지속성)인 특징을 가진다.
1) 원자성 : 트랜잭션이 데이터베이스에 모두 반영되든가 아니면 전혀 반영되지 않아야 한다는 것이다.
2) 일관성 : 트랜잭션의 작업 처리의 결과가 항상 일관성이 있어야 한다는 것이다.
3) 독립성 : 둘 이상의 트랜잭션이 동시에 실행되고 있으면 어떤 하나의 트랜잭션이라도 다른 트랜잭션의 연산에 끼어들 수 없다. 즉 하나의 트랜잭션이 완료되기 전까지 다른 트랜잭션이 특정 트랜잭션의 결과를 참조할 수 없다.
4) 지속성 : 트랜잭션이 성공적으로 완료되었을 경우 결과는 영구적으로 반영된다는 것이다.
트랜잭션의 Commit과 Rollback 연산
1) Commit : 하나의 트랜잭션이 성공적으로 끝났고 데이터베이스가 일관성 있는 상태에 있을 때 하나의 트랜잭션이 끝났다는 것을 알려주기 위해 사용되는 연산이다.
2) Rollback : 하나의 트랜잭션 처리가 비정상적으로 종료되어 트랜잭션의 원자성이 깨진 경우 트랜잭션을 처음부터 다시 시작하거나 트랜잭션의 부분적으로 연산된 결과를 다시 취소시키는 연산이다.
4. JPA 를 활용해 객체와 테이블을 생성하고 매핑
- @Entity : JPA가 관리해야할 객체이며 DB내 테이블과 매핑된다.
- @Id : 데이터 베이스의 한 테이블의 PK와 매핑된다.
package hellojpa;
import javax.persistence.Entity;
import javax.persistence.Id;
@Entity
public class Member {
@Id
private Long id;
private String name;
//Getter, Setter …
}
**
인프런 김영한님의 "자바 ORM 표준 JPA 프로그래밍" 강의를 보고 공부하면서
정리한 내용입니다.
혹시 문제가 있으시다면 당장 삭제하겠습니다.
'프로그래밍공부 > JPA' 카테고리의 다른 글
JPA의 엔티티 매핑 (0) | 2022.07.31 |
---|---|
JPA의 영속성 관리 (0) | 2022.07.20 |
JPA란 (0) | 2022.07.17 |