JPA 시작하기

유동우·2023년 7월 22일
0
post-thumbnail

데이터베이스 방언 이란?

  • JPA는 특정 언어에 종속되지 않는다
  • 각각의 데이터베이스가 제공하는 SQL 문법과 함수가 약간씩 다르다
  • 방언 : SQL의 표준을 지키지 않는 데이터베이스의 특정 기능

hibernate.dialect 속성에 지정하면 된다

• H2 : org.hibernate.dialect.H2Dialect
• Oracle 10g : org.hibernate.dialect.Oracle10gDialect
• MySQL : org.hibernate.dialect.MySQL5InnoDBDialect

JPA의 동작 방식

package hellojpa;

import javax.persistence.Entity;
import javax.persistence.Id;

@Entity // JPA가 관리할 객체
	public class Member {
		
        @Id // 데이터베이스 PK와 매핑
		private Long id;
		private String name;
        
        //Getter, Setter ...
create table Member (
  id bigint not null,
  name varchar(255),
  primary key (id)
}; 

위와 같은 SQL문을 DB에서 실행하여 Member table을 생성한다

주의

  • 엔티티 매니저 팩토리(EntityManagerFactory)는 하나만 생성해서 애플리케이션 전체에서 공유해야 한다
  • 엔티티 매니저는 쓰레드간 공유하면 안된다
  • JPA의 모든 데이터 변경은 트랜잭션 안에서 실행되어야 한다

JPQL

엔티티매니저를 사용해 조건 하나로 멤버를 검색할 수 있다.
하지만 범위가 주어진 (ex) 나이가 18세 이상이 멤버 모두 검색?
을 할 수는 없다.

즉, JPA를 사용하여 엔티티 객체를 중심으로 개발할 수 있지만 검색 쿼리가 문제이다
(검색을 할 때도 테이블이 아닌 엔티티를 중심으로 검색하고, 모든 DB의 데이터를 객체로 변환하여 검색하는 불가능하기 때문)

JPQL 의 등장

  • SQL을 추상화한 JPQL이라는 객체지향쿼리 언어를 제공
  • SQL과 문법이 유사하다
  • JPQL = 엔티티 객체를 대상으로 쿼리
  • SQL = 데이터베이스 테이블을 대상으로 쿼리

JPQL 정리

  • 테이블이 아닌 객체를 대상으로 검색하는 객체지향쿼리이다.
  • SQL을 추상화해서 특정 데이터베이스 SQL에 의존하지 않는다.
  • JPQL을 한마디로 정의하면 객체 지향 SQL이다

Reference
김영한 님 - 자바 ORM 표준 JPA 프로그래밍 - 기본편

profile
효율적이고 꾸준하게

2개의 댓글

comment-user-thumbnail
2023년 7월 22일

정리가 잘 된 글이네요. 도움이 됐습니다.

1개의 답글