일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- 대규모 시스템 설계
- Golines
- GoF
- UnBuffered channel
- Kubernetes
- AWS
- System Design
- http 413
- 오블완
- golang
- gitops
- Buffered channel
- apollo router
- 배포 파이프라인
- 티스토리챌린지
- GoF 디자인패턴
- 디자인패턴
- body size
- Logrus
- Infra
- elasticsearch
- 컴포지트패턴
- 윈도우키보드
- 배포 프로세스
- Intellij
- Helm V3
- goland
- go
- intellij ide
- notification system
Archives
- Today
- Total
Fall in IT.
객체지향쿼리언어 JPQL, Criteria, QueryDSL 본문
오늘은 JPA에서 사용할 수 있는 객체지향 쿼리언어에 대해서 알아보겠습니다.
JPA는 복잡한 검색 조건을 사용하여 엔티티 객체를 조회할 수 있는 다양한 쿼리 기술들을 지원합니다. 그 종류로는 아래와 같습니다.
객체지향쿼리언어의 종류와 특징
- JPQL(Java Persistence Query Language)
- 데이터베이스 테이블을 대상으로하는 데이터 중심의 쿼리가 아닌 객체를 대상으로 검색하는 객체지향 쿼리
(엔티티 객체를 조회하는 객체지향 쿼리.)
- SQL을 추상화해서 특정 데이터베이스 SQL에 의존하지 않는다.
- JPQL은 SQL보다 간단하다. - Criteria
- JPQL을 편하게 작성하도록 도와주는 API, 빌더 클래스모음.
- 문자가 아닌 query.select(m).where.. 과 같이 프로그래밍 코드로 JPQL을 작성할 수 있어, 컴파일시 에러를 잡아낼 수 있다.
- IDE를 사용하면 코드 자동완성을 지원한다.
- 장점도 많지만, 사용하기 복잡하고 어려워 코드의 가독성이 떨어지는 단점도 있다. - QueryDSL
- JPQL을 편하게 작성하도록 도와주는 빌더 클래스 모음, 비표준 오픈소스 프레임워크.
- Criteria처럼 코드 기반이면서 단순하고 사용하기 쉽다.
- 코드의 가독성 또한 높다. - NativeQuery
- JPA에서 JPQL 대신 직접 SQL을 사용하는 것을 말한다.
- 특정 데이터베이스에 의존하는 기능을 사용해야 할 때 사용한다.
객체지향쿼리언어 종류별 Sample Code
- JPQL(Java Persistence Query Language)
String jpql = "select m from Member as m where m.student_number = "0991022";
Member member = em.createQuery(jpql, Member.class).getMember(); - Criteria
//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("student_number"), "0991022");
Member member = em.createQuery(cq).getMember(); - QueryDSL
//준비
JPAQuery query = new JPAQuery(em);
QMember member = QMember.member;
//쿼리, 결과조회
Member member = query.from(member)
.where(member.student_number.eq("0991022"))
.get(member);
참조
- 자바 ORM 표준 프로그래밍, 김영한 저
모두 즐거운 코딩 하세요~
'프레임워크 > Spring Data JPA' 카테고리의 다른 글
Spring Data JPA 페이징과 정렬 (0) | 2016.03.28 |
---|---|
Spring Data JPA 기본키 매핑하는 방법 (3) | 2016.03.16 |
Spring Data JPA 연관관계 매핑하는 방법 (1) | 2016.03.10 |
Comments