
자바 ORM 표준 JPA 프로그래밍 - 기본편 수업을 듣고 정리한 내용입니다.
✔️ H2 데이터베이스
✔️ 메이븐 소개
✔️ 데이터베이스 방언
✔️ 데이터베이스 방언
JPA는 사용하는 DB Dialect에 따라서 알맞은 SQL을 생성해준다.H2 : org.hibernate.dialect.H2DialectOracle 10g : org.hibernate.dialect.Oracle10gDialect MySQL : org.hibernate.dialect.MySQL5InnoDBDialect
✔️ JPA 구동 방식
JPA는 Persistence라는 클래스가 있다.Persistence에서 persistence.xml 설정 정보를 읽어서 EntityManagerFactory 객체를 생성해준다.EntityManagerFactory에서 필요할 때마다 EntityManager를 생성해서 사용한다.
트랜잭션?
jpa에서는 트랜잭션이 중요하다.
- JPA의 모든 데이터 변경은 트랜잭션 안에서 실행한다.
- 엔티티 매니저 팩토리는 하나만 생성해서 애플리케이션 전체에서 공유한다.
H2 데이터베이스에서 객체 생성

@Entity : JPA가 관리할 객체@Id : 데이터베이스 PK와 매핑
실행

✔️ 회원 등록
JpaMain
package hellojpa;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.EntityTransaction;
import javax.persistence.Persistence;
public class JpaMain {
public static void main(String[] args) {
EntityManagerFactory emf = Persistence.createEntityManagerFactory("hello");
EntityManager em = emf.createEntityManager();
EntityTransaction tx = em.getTransaction();
tx.begin();
Member member = new Member();
member.setId(1L);
member.setName("HelloA");
em.persist(member);
tx.commit();
em.close();
emf.close();
}
}
실행 결과
옵션 설정
옵션을 통해 출력되는 것이다.
db 확인 결과
✔️ 코드 리팩터링
try-catch문 추가
package hellojpa;
import javax.persistence.*;
public class JpaMain {
public static void main(String[] args) {
EntityManagerFactory emf = Persistence.createEntityManagerFactory("hello");
EntityManager em = emf.createEntityManager();
EntityTransaction tx = em.getTransaction();
tx.begin();
try {
Member member = new Member();
member.setId(2L);
member.setName("HelloB");
em.persist(member);
tx.commit();
} catch (Exception e){
tx.rollback();
} finally {
em.close();
}
emf.close();
}
}
✔️ 조회
package hellojpa;
import javax.persistence.*;
public class JpaMain {
public static void main(String[] args) {
EntityManagerFactory emf = Persistence.createEntityManagerFactory("hello");
EntityManager em = emf.createEntityManager();
EntityTransaction tx = em.getTransaction();
tx.begin();
try {
Member findMember = em.find(Member.class, 1L);
System.out.println("findMember.id = " + findMember.getId());
System.out.println("findMember.name = " + findMember.getName());
tx.commit();
}catch (Exception e){
tx.rollback();
} finally {
em.close();
}
emf.close();
}
}
✔️ 수정
package hellojpa;
import javax.persistence.*;
public class JpaMain {
public static void main(String[] args) {
EntityManagerFactory emf = Persistence.createEntityManagerFactory("hello");
EntityManager em = emf.createEntityManager();
EntityTransaction tx = em.getTransaction();
tx.begin();
try {
Member findMember = em.find(Member.class, 1L);
findMember.setName("HelloJPA");
tx.commit();
}catch (Exception e){
tx.rollback();
} finally {
em.close();
}
emf.close();
}
}
실행 결과
단순한 2가지 조회 방법
EntityManager.find()a.getB().getC())➡️ 이때, 나이가 18살 이상인 회원을 모두(복잡한 조회) 검색하고 싶을 때는 위 2가지 조회 방법으로는 부족하다.
✔️ JPQL
➡️ JPQL : 식별자를 통한 단순 조회가 아닌 추가 조건들을 통해 조회하고 싶을 때 사용한다.
JPQL이라는 객체 지향 쿼리 언어를 제공한다.JPQL은 SQL과 문법이 유사하다.
🔔 JPQL vs SQL
JPQL: 엔터티 객체를 대상으로 쿼리
SQL: 데이터베이스 테이블을 대상으로 쿼리
JPQL은 테이블이 아닌 객체를 대상으로 검색하는 객체 지향 쿼리이다.SQL을 추상화해서 특정 데이터베이스 SQL에 의존하지 않는다.JPQL을 한마디로 정의하면 객체 지향 SQL이다.JPQL을 자세하게 공부한다.
참고