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 ( 조건 );