JPA (Java Persistence API)
• 정의: JPA는 자바 애플리케이션에서 객체 관계 매핑(ORM)을 위한 표준 명세입니다.
• 주요 특징:
• ORM 제공: 객체를 관계형 데이터베이스 테이블과 매핑합니다.
• 표준화: JPA는 여러 구현체 (예: Hibernate, EclipseLink) 간의 표준을 제공합니다.
• 애너테이션: 엔티티 클래스에 애너테이션을 사용하여 매핑을 정의합니다.
• EntityManager: JPA의 핵심 인터페이스로, 데이터베이스 작업을 관리합니다.
• 장점:
• 코드와 데이터베이스 간의 간단한 매핑을 제공합니다.
• 여러 데이터베이스 벤더에 대한 추상화를 제공합니다.
• 단점:
• 복잡한 쿼리 작성이 어렵고, 특히 동적 쿼리에서는 제한적입니다.
JPQL (Java Persistence Query Language)
• 정의: JPQL은 JPA에서 제공하는 객체 지향 쿼리 언어입니다.
• 주요 특징:
• 객체 지향 쿼리: SQL과 비슷하지만, 테이블이 아닌 엔티티 객체를 대상으로 합니다.
• 엔티티 기반: 데이터베이스 테이블이 아닌 엔티티 클래스와 속성에 대해 쿼리합니다.
• 표준 쿼리 언어: JPA 표준의 일부로, 모든 JPA 구현체에서 지원됩니다.
• 장점:
• JPA와 통합되어 있어 일관된 API를 제공합니다.
• SQL과 유사하지만 객체 지향적인 쿼리를 작성할 수 있습니다.
• 단점:
• 복잡한 동적 쿼리 작성에 한계가 있습니다.
• 정적 쿼리에 적합하며, 동적 쿼리의 경우 문자열 조작이 필요합니다.
@Query("SELECT " +
" blog " +
"FROM TbBlog blog " +
"WHERE blog.isUse = UseYn.Y " +
"AND blog.point > 0 " +
"AND blog.writeType != 'INFO' " +
"ORDER BY " +
" blog.issuedType ASC" )
List<TbBlog> findBlogList();
QueryDSL
• 정의: QueryDSL은 Java에서 타입 안전한 SQL-like 쿼리를 작성하기 위한 프레임워크입니다.
• 주요 특징:
• 타입 안전성: 컴파일 시점에 쿼리의 유효성을 검사합니다.
• 동적 쿼리: 복잡한 동적 쿼리를 쉽게 작성할 수 있습니다.
• 플루언트 API: 메서드 체이닝을 통해 직관적이고 가독성 높은 쿼리를 작성할 수 있습니다.
• 지원되는 언어: JPA, SQL, MongoDB, Lucene 등 다양한 백엔드를 지원합니다.
• 장점:
• 컴파일 시점에 쿼리의 유효성을 검사하여 오류를 줄입니다.
• 복잡한 동적 쿼리를 간단하게 작성할 수 있습니다.
• IntelliJ와 같은 IDE에서 자동 완성을 지원하여 생산성을 높입니다.
• 단점:
• 초기 설정이 복잡할 수 있습니다.
• JPA와의 통합을 위해 추가적인 설정과 코드가 필요합니다.
예시
public List<TbBlog> findBlogList() {
JPAQueryFactory queryFactory = new JPAQueryFactory(em);
return queryFactory.selectFrom(tbBlog)
.where(
tbBlog.isUse.eq(UseYn.Y),
tbBlog.point.gt(0),
tbBlog.writeType.ne("INFO")
)
.orderBy(
tbBlog.regDt.asc()
)
.fetch();
}
요약
• JPA는 Java 애플리케이션에서 ORM을 위한 표준 명세로, 데이터베이스와 객체를 매핑합니다.
• JPQL은 JPA에서 제공하는 객체 지향 쿼리 언어로, SQL과 유사하지만 엔티티 객체를 대상으로 합니다.
• QueryDSL은 타입 안전한 SQL-like 쿼리를 작성하기 위한 프레임워크로, 동적 쿼리를 작성할 때 특히 유용합니다.
'Spring > JPA' 카테고리의 다른 글
jpa 데이터 insert 및 read 해보기 (0) | 2024.05.31 |
---|---|
스프링부트 jpa 시작해보기 - jpa 정의 및 jdbc 설명 (0) | 2024.05.30 |
Spring JPA Pageable 처리 - sort 및 Page 처리(totalElements) (0) | 2024.01.09 |
[spring JPA] column annotation 컬럼 매칭 레퍼런스 (0) | 2021.05.03 |
[Spring JPA] @Id와 @GeneratedValue - Primary Key 생성방법 (0) | 2021.04.02 |