반응형

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 쿼리를 작성하기 위한 프레임워크로, 동적 쿼리를 작성할 때 특히 유용합니다.

반응형

+ Recent posts