JPA를 공부해야 하는 이유

2019. 9. 4. 17:37개발공부/JPA

 

JPA를 공부해야하는 이유

전 세계 개발자들이 MyBatis와 Hibernate 중 어떤 것을 더 많이 사용하는지에 대한 통계자료입니다.

동아시아권을 제외하면 대부분의 나라들이 압도적으로 JPA 방식의 Hibernate를 더 선호하고 사용한다는 걸 알 수 있습니다.

물론 그렇다고 무조건적으로 Mybatis보다 Hibernate가 더 좋은 방법이다 생각하고 사용해서는 안 됩니다. Hibernate의 경우 통계자료나 복잡한 쿼리의 경우 JDBC를 직접적으로 사용하는 Mybatis에 비해서 매우 많이 불편하다는 단점이 있습니다.

결국은 Hibernate와 Mybatis를 적절히 혼용하여 각각의 이점을 활용하여 사용하는 게 중요합니다. 사용할 줄 아는데 사용하지 않는 것과 사용할 줄 몰라서 사용하지 못하는 것은 매우 다르기 때문에 JPA에 대한 공부를 하려고 합니다.

JPQL이란?

JPQL은 Java Persistence Query Language의 약어로 JPA에서 객체를 탐색할 때 사용하는 쿼리 기술입니다. JPA에서 객체를 탐색할 때 기존에 SQL을 이용할 경우 테이블 관점에서 데이터를 조회하기 때문에 객체지향 프로그래밍을 할 수 없고 데이터베이스마다 SQL이 조금씩 다르기 때문에 데이터베이스에 종속적인 개발을 하게 된다는 문제점이 있습니다. 이를

객체의 관점에서 프로그래밍을 할 수 있도록 도와주는 기술

이 JSQL입니다.

( 쉽게 생각하면 JSQL = 객체지향 SQL )

 

JSQL의 다양한 방법

  • JPQL ( Java Persistence Query Language )
  • Criteria 쿼리 : JPQL을 편하게 사용할 수 있도록 도와주는 API, 빌더 클래스 모음
  • 네이티브 SQL : JPA에서 JPQL이 아닌 기존 SQL을 직접 사용할 수 있도록 지원
  • QueryDSL : Criteria와 같지만 코드가 더 사용하고 보기에 간편함. 비표준 오픈소스 프레임워크
  • JDBC 직점 사용, MyBatis와 같은 SQL 매퍼 프레임워크와 같이 사용

 

JPQL 사용 예

Criteria, QueryDSL와 같은 빌더 도구들은 결국 JPQL을 더 편리하게 사용할 수 있도록 해주는 빌더 클래스일 뿐입니다. 따라서 JPQL을 이해하고 사용할 수 있어야 다른 도구들도 사용할 수 있습니다.

JPQL을 사용하게 된다면 특정 데이터베이스에 의존하지 않고 개발을 할 수 있습니다.
  • 기본적인 사용법
    String jsql = "select m from Member as m where m.name = :name";
    List<Member> resultList = em.createQuery(jpql,Member.class).getResultList();

    jsql에서는 테이블이 아닌 객체를 가지고 조회합니다.

    SQL : select ( 컬럼명 ) from ( 테이블 이름 ) where ( 조회 조건 );

    JSQL : select ( 엔티티 객체의 필드명 ) from ( 엔티티 객체 ) where ( 조건 );