필요한 모드 라이브러리를 직접 내려받아서 관리하기는 어려우므로 메이븐이라는 도구를 사용하겠다.
메이븐은 라이브러리 관리 기능과 빌드 기능을 제공
JPA 구현체로 하이버네이트를 사사용하기 위한 핵심 라이브러리는 다음과 같다.
- hibernate-core: 하이버네이트 라이브러리
- hibernate-entitymanager: 하이버네이트가 JPA 구현체로 동작하도록 JPA 표준을 구현한 라이브러리
- hibernate-jpa-2.1-api: JPA 2.1 표준 API를 모아둔 라이브러리
객체 매핑
@Entity: 이 클래스를 테이블과 매핑한다고 JPA에 알려준다. 이렇게 @Entity가 사용된 클래스를 엔티티 클래스라 한다.
@Table
@Id: 엔티티 클래스의 필드를 테이블의 기본 키(Primary Key)에 매핑한다. @Id가 사용된 필드를 식별자 필드라 한다.
@Column
데이터베이스 방언
JPA는 특정 데이터베이스에 종속적이지 않은 기술이다. 따라서 다른 데이터베이스로 손쉽게 교체할 수 있다. 그런데 각 데이터베이스가 제공하는 SQL 문법과 함수가 조금씩 다르다는 문제점이 있다. 예를 들어 데이터베이스마다 다음과 같은 차이점이 있다.
- 데이터 타입: 가변 문자 타입으로 MySQL은 VARCHAR, 오라클은 VARCHAR2를 사용한다.
- 다른 함수명: 문자열을 자르는 함수로 SQL 표준은 SUBSTRING()를 사용하지만 오라클은 SUBSTR()을 사용한다.
- 페이징 처리: MySQL은 LIMIT을 사용하지만 오라클은 ROWNUM을 사용한다.
이처럼 SQL 표준을 지키지 않거나 특정 데이터베이스만의 고유한 기능을 JPA에서는 방언(Dialect)이라 한다.
애플리케이션 개발자가 특정 데이터베이스에 종속되는 기능을 많이 사용하면 나중에 데이터베이스를 교체하기 어렵다. 하이버네이트를 포함한 대부분의 JPA 구현체들은 이런 문제를 해결하려고 다양한 데이터베이스 방언 클래스를 제공한다.
엔티티 매니저 설정
- 엔티티 매니저 팩토리 생성: 엔티티 매니저 팩토리는 애플리케이션 전체에서 딱 한 번만 생성하고 공유해서 사용해야 한다.
- 엔티티 매니저 생성: 엔티티 매니저를 사용해서 엔티티를 데이터베이스에 등록/수정/삭제/조회할 수 있다. 엔티티 매니저는 데이터베이스 커넥션과 밀접한 관계가 있으므로 스레드 간에 공유하거나 재사용하면 안 된다.
- 종료
엔티티를 저장하려면 엔티티 매니저의 persist() 메소드에 저장할 엔티티를 넘겨주면 된다.
JPQL
JPA는 엔티티 객체를 중심으로 개발하므로 검색을 할 때도 테이블이 아닌 엔티티 객체를 대상으로 검색해야 한다. 애플리케이션이 필요한 데이터만 데이터베이스에서 불러오려면 결국 검색 조건이 포함된 SQL을 사용해야한다. JPA는 JPQL(Java Persistence Query Language)이라는 쿼리 언어로 이런 문제를 해결한다.
JPA는 SQL을 추상화한 JPQL이라는 객체지향 쿼리 언어를 제공한다.
JPQL은 엔티티 객체를 대상으로 쿼리한다. 클래스와 필드를 대상으로 쿼리한다. JPQL은 데이터베이스 테이블을 전혀 알지 못한다.
SQL은 데이터베이스 테이블 대상으로 쿼리한다.
'JPA > 자바 ORM 표준 JPA 프로그래밍' 카테고리의 다른 글
Chap.6 다양한 연관관계 매핑 (0) | 2021.05.23 |
---|---|
Chap.5 연관관계 매핑 기초 (0) | 2021.05.19 |
Chap.4 엔티티 매핑 (0) | 2021.05.17 |
Chap.3 영속성 관리 (0) | 2021.05.10 |
Chap.1 JPA 소개 (0) | 2021.05.10 |