Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
Tags
- GitHub
- 외래키
- 기술면접
- 변수
- 앵귤러
- js
- json
- 생성자 네이밍
- JPQL
- jquery
- DCL
- jdk
- DDL
- 절차지향
- 네이밍 컨벤션
- V8 자바 스크립트 엔진
- VS Code
- 자바스크립트
- Visual Studio Code
- 트랜잭션
- Angular.js
- node.js
- 기본키
- 깃허브
- 생성자
- angular
- javascript
- DML
- 무결성
- jre
Archives
- Today
- Total
console.log("연록")
[JPQL] JPQL이란, 기본 문법과 쿼리 API, TypeQuery·Query, 결과 조회 본문
728x90
JPQL이란?
JPQL(Java Persistence Query Language)의 특징
- 엔티티 객체를 조회하는 객체지향 쿼리 → 테이블이 아니라 엔티티 객체를 대상으로 퀄
- SQL을 추상화해서 특정 데이터베이스에 의존하지 않음
- 결국 SQL로 변환
JPQL의 장점
- JPQL은 SQL을 추상화해서 특정 데이터베이스에 의존하지 않음 → 데이터베이스 방언만 변경하면 JPQL을 수정할 필요 없음
- SQL보다 간결 → 엔티티 직접 조회, 묵시적 조인, 다형성 지원
실행한 JPQL
select m
from Member as m
where m.username = 'kim'
실제 실행된 SQL
select
member.id as id,
member.age as age,
member.team_id as team,
member.name as name
from
Member member
where
member.name = 'kim'
기본 문법과 쿼리 API
persist()를 사용하면 되므로 INSERT문은 없음
select_문 :: =
select_절
from_절
[where_절]
[groupby_절]
[having_절]
[orderby_절]
update_문 :: = update_절 [where_절]
delete_문 :: = delete_절 [where_절]
select 문 주의사항
- 대소문자 구분
- 엔티티와 속성은 대소문자 구분 → Member, username은 대소문자 구문
- SELECT, FROM, AS는 구분하지 않음
- 엔티티 이름
- JPQL에서 사용한 Member는 클래스 명이 아니라 엔티티 명
- 엔티티 명은 @Entity(name="XXX")로 지정 가능
- 엔티티 명을 지정하지 않으면 클래스명을 기본값으로 사용
- 별칭은 필수
select username From Member m //잘못된 문법, username을 m.username으로 고쳐야 함
TypeQuery, Query
JPQL을 실행하려면 쿼리 객체를 만들어야 함
- 쿼리 객체에는 TypeQuery, Query가 있음
- 반환한 타입을 명확하게 지정할 수 있으면 TypeQuery
- 명확하게 지정할 수 없으면 Query
TypeQuery <Member> query = em.createQuery("select m from Member m", Member.class);
List <Member> resultList = query.getResultList();
for (Member member : resultList) {
System.out.println("membmer = " + member);
}
// 조회할 대상이 Member 엔티티로 명확 → TypeQuery
Query query = em.createQuery ("select m.username, m.age from Member m");
List resultList = query.getResultList();
for (Object o : resultList) {
Object [] result = (Object[]) o; // 결과가 둘 이상이면 Object 반환
System.out.println("username = " + reulst[0]);
System.out.println("age = " + result[1]);
}
// 조회 대상이 String 타입인 이름과 Integer 타입인 나이이므로 조회할 대상이 명확하지 않음 -> Query
결과 조회
- query.getResultList() : 결과를 예제로 반환하고 결과가 없으면 빈 컬렉션 반환
- query.getSingleResult() : 결과가 정확히 하니일 때 사용
- 결과가 없으면 javax.persistence.NoResultException 예외 발생
- 결과가 1개 보다 많으면 javax.persistence.NonUniqueResultException 예외 발생
getSingleResult()는 결과가 정확히 1개가 아니면 예외가 발생하므로 주의해야 함
'bone up > JPA' 카테고리의 다른 글
[JPQL] 파라미터 바인딩, 프로젝션 (0) | 2022.05.30 |
---|