🖊 JPQL(Java Persistence Query Language)
- JPQL은 객체 지향 쿼리언어로 JPA Entity를 대상으로 작동한다.
- 그러므로 SQL을 추상화해서 특정 베이스 SQL에 의존하지 않는다.
🖊 JPQL 문제점
em.createQuery("select m from Member as m where m.username like '%jeong%'",
Member.class
).getResultList();
- 위의 쿼리 문장처럼 동적으로 쿼리를 수정하는게 힘들다.
🖊 Criteria
- 자바에서 제공하는 JPQL을 지원하는 빌더 클래스다.
//criteria 사용 준비
CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<Member> query = cb.createQuery(Member.class);
//루트 클래스 (조회 시작 클래스)
Root<Member> m = query.from(Member.class);
//쿼리 생성
CriteriaQuery<Member> cq = query.select(m).where(cb.equal(m.get("username"), "kim"));
List<Member> resultList = em.createQuery(cq).getResultList();
- 자바 코드로 쿼리문을 작성할 수 있다.
- 동적 쿼리를 비교적 편하게 작성할 수 있다.
- 유지보수 및 작성하기가 너무 복잡해서 쓰기가 힘들다.
🖊 QueryDSL
TODO : 예제 코드 작성
- JQPL 빌더 역할
- 단순하고 쉽다.
- 동적쿼리 작성 편리하다.
- 컴파일 시점에 문법 오류를 찾을 수 있다.