JPA?
JPA란 Java application에서 관계형 데이터 베이스를 사용하는 방식을 정의한 Interface 이며, 프레임워크를 통해 디비에 쉽게 접근이 가능하도록 해준다.
Hibernate / Eclipse Link / OpenJPA 등의 라이브러리가 있다.
Hibernate / Eclipse Link / OpenJPA 등의 라이브러리가 있다.
JPA Library
Hibernate
- JPA의 구현체
- hql이라는 강력한 쿼리언어를 포함함.
- 객체 지향적이며 객체를 통한 데이터 바인딩으로 쉽게 데이터를 다룬다.
- hql이라는 강력한 쿼리언어를 포함함.
- 객체 지향적이며 객체를 통한 데이터 바인딩으로 쉽게 데이터를 다룬다.
| Hibernate 장점 | Hibernate 단점 |
|---|---|
| 객체지향적임(객체집중개발가능) | 초기 진입장벽 존재 |
| 유지 보수 및 생산성이 좋음 | |
| DB교체 용이함 |
OpenJPA
- Apache에서 만든 도구
- JAVA EE 5 사양에서 가능한 100% 오픈소스
- BEA 시스템이 소라메트릭을 인수한 결과로 아파치에 기부
- JAVA EE 5 사양에서 가능한 100% 오픈소스
- BEA 시스템이 소라메트릭을 인수한 결과로 아파치에 기부
| OpenJPA 장점 | OpenJPA 단점 |
|---|---|
| 좋은 문서 풀 제공 | 버그 존재 |
| 사용성 좋음 |
Eclipse Link
- TopLink 에센셜은 오라클의 JPA구현 무료버전에서 나옴
- EclipseLink는 Glassfish v3.0의 JPA2.0 제공업체
- EclipseLink는 Glassfish v3.0의 JPA2.0 제공업체
Spring JPA 모듈 추가
Gradle
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
}
Maven
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
</dependencies>
자주쓰이는 예약어
| 예약어/JPQL | 설명 | 예제 |
|---|---|---|
| distinct | 중복된 결과를 제거하여 유일한 값만 반환. | findAllDistinctByColumnName |
| findBy | 지정된 속성을 기반으로 엔티티를 조회. | findByPropertyName |
| readBy | 지정된 속성을 기반으로 엔티티를 조회. | readByPropertyName |
| queryBy | 지정된 속성을 기반으로 엔티티를 조회. | queryByPropertyName |
| getBy | 지정된 속성을 기반으로 엔티티를 조회. | getByPropertyName |
| countBy | 지정된 속성을 기반으로 엔티티의 수를 계산. | countByPropertyName |
| deleteBy | 지정된 속성을 기반으로 엔티티를 삭제. | deleteByPropertyName |
| removeBy | 지정된 속성을 기반으로 엔티티를 삭제. | removeByPropertyName |
| existsBy | 지정된 속성을 기반으로 엔티티의 존재 여부를 확인. | existsByPropertyName |
| findAllBy | 지정된 속성을 기반으로 엔티티의 리스트를 조회. | findAllByPropertyName |
| findBy…And… | 여러 속성을 조합하여 엔티티를 조회. | findByProperty1AndProperty2 |
| findBy…Or… | 여러 속성 중 하나라도 일치하는 엔티티를 조회. | findByProperty1OrProperty2 |
| findBy…Is… | 속성의 값과 일치하는 엔티티를 조회. | findByPropertyIsValue |
| findBy…Equals… | 속성의 값과 일치하는 엔티티를 조회. | findByPropertyEqualsValue |
| findBy…Between… | 지정된 범위 내에 속성의 값이 있는 엔티티를 조회. | findByPropertyBetween(startValue, endValue) |
| findBy…Like… | 속성 값이 지정된 패턴과 일치하는 엔티티를 조회. | findByPropertyLike(pattern) |
| findBy…IsNull | 속성 값이 NULL인 엔티티를 조회. | findByPropertyIsNull |
| findBy…IsNotNull | 속성 값이 NULL이 아닌 엔티티를 조회. | findByPropertyIsNotNull |
| findBy…In | 속성 값이 지정된 값 중 하나와 일치하는 엔티티를 조회. | findByPropertyIn(values) |