JPA 시작하기
Java 8
Maven
groupId: jpa-basic
artifactId: ex1-hello-jpa
version: 1.0.0
JPA 설정하기
persistence.xml
resources/META-INF/persistence.xml
persistence-unit
이름 지정
javax.persistence
JPA 표준 속성
hibernate
하이버네이트 전용 속성
dialect
JPA는 특정 DB에 종속되지 않는다.
각각의 DB가 제공하는 SQL 문법과 함수가 조금씩 다르다.
이렇게 SQL 표준을 지키지 않는 특정 DB만의 고유한 기능을 방언이라고 한다.
애플리케이션 개발
JPA 구동 방식
JPA의 Persistence
클래스가 META-INF/persistence.xml
설정 파일을 읽어서 EntityManagerFactory
라는 클래스를 생성한다. 여기서 필요할 때마다 EntityManager
를 만든다.
회원 생성
이 테이블대로 객체를 만들고 DB에서 불러와보자.
실행하면 위와 같은 쿼리가 날아간다.
회원 수정
update 쿼리가 나가는 걸 확인할 수 있다.
주의할 점
EntityManagerFactory
애플리케이션 실행 시점에 하나만 생성해서 애플리케이션 전체에 걸쳐 공유한다.
EntityManager
요청이 왔을 때 썼다가 끝나면 버리는 사이클을 반복한다.
그래서 절대 스레드 간에 공유해서는 안된다. 사용하고 바로 버려야 한다.
JPA의 모든 데이터 변경은 트랜잭션 안에서 실행해야 한다.
트랜잭션을 실제 지정해본 경험이 없어도 DB 자체적으로 트랜잭션을 사용하기 때문에 적용해왔을 것이다.
JPQL
EntityManger.find()
는 가장 단순한 조회 방법이다.나이가 18살 이상인 회원
같은 쿼리는 JPQL을 사용해야 한다.
JPA를 사용하면 Entity 객체를 중심으로 개발하게 된다.
검색 또한 테이블이 아닌 Entity 객체를 대상으로 한다.
모든 DB 데이터를 객체로 변환해서 검색하는 것은 불가능하다.
필요한 데이터만 DB에서 불러오려면 결국 검색 조건이 포함된 SQL이 필요하다.
하지만 쿼리를 쓰면 SQL에 종속된다.
이때 객체를 대상으로 검색할 수 있게 하는 기술이 JPQL이다.
SQL과의 차이
JPQL
Entity 객체를 대상으로 쿼리
SQL
데이터베이스 테이블을 대상으로 쿼리
특징
JPA가 제공하는 SQL을 추상화한 객체 지향 쿼리 언어
한마디로 객체지향 SQL이다.
추상화했기 때문에 특정 데이터베이스에 의존하지 않는다.
SQL과 문법이 유사하다.
select, from, where, group by, having, join을 지원한다.
Last updated