2021. 2. 15. 15:54ㆍ프로그래밍 언어/Spring Framework
[인프런 김영한] JPA - JPQL 기본문법
해당 글은 인프런 김영한강사님의 영상을 보고 정리한 글입니다.
Spring Boot, Spring Data JPA를 사용해 실습하였습니다.
김영한 인프런 : www.inflearn.com/users/@yh
▣ JPQL 소개
* JPQL은 객체지향 쿼리 언어. 테이블을 대상으로 쿼리하는것이 아니라 Entity 객체를 대상으로 쿼리한다.
* JPQL은 SQL을 추상화해서 특정 데이터베이스 SQL에 의존하지 않는다.
* JPQL은 결국 SQL로 변환
▣ 실습
▣ JPQL 문법
* "select m from Member as m where m.age > 18"
- Entity와 속성은 대소문자 구분한다 (Member, age)
- @Entity(name = "MM")일경우 MM이 Entity 이름이다.
- JPQL 키워드는 대소문자 구분하지 않음(select, from, where)
- Entity 이름 사용, Table 이름이 아님
- 별칭은 필수 (as는 생략가능)
* TypeQuery : 반환 타입이 명확할 때
* Query : 반환 타입이 명확하지 않을 때
TypeQuery<Member> query = em.createQuery("select m from Member m", Member.class);
TypeQuery<String> query = em.createQuery("select m.username from Member m", String.class); // username는 string
TypeQuery<Member> query = em.createQuery("select m.username, m.age from Member m"); // username는 string, age는 int Type을 선택할 수 없기 때문에 Query 사용
Query query = em.createQuery("select m.username, m.age from Member m"); // 반환 타입이 명확하지 않을 때 사용
▣ 결과 조회 API
query.getResultList() : 결과가 하나 이상일 때, 리스트 반환
* 결과가 없으면 빈 리스트 반환
TypeQuery<Member> query = em.createQuery("select m from Member m", Member.class);
List<Member> resultList = query.getResultList();
iterator(Member member1 : resultList) {
System.out.println("member 1 : " + member1);
}
query.getSingleResult() : 결과가 정확히 하나, 단일 객체 반환
* 결과가 없으면 noResultException 반환
* 결과가 둘 이상이면 NonUiqueResultException 반환
TypeQuery<Member> query = em.createQuery("select m from Member m", Member.class);
Member result = query.getSingleResult();
System.out.println("result = " + result) ;
▣ 파라미터 바인딩 - 이름 기준, [위치 기준(쓰지 말기)]
TypeQuery<Member> query = em.createQuery("select m from Member m where m.username = :username", Member.class);
query.setParameter("username", "member1");
// 실행 쿼리 = "select * from Member where username = username1
'프로그래밍 언어 > Spring Framework' 카테고리의 다른 글
[인프런 김영한] JPA - 페이징 (0) | 2021.02.16 |
---|---|
[인프런 김영한] JPA - JPQL 프로젝션(SELECT) (0) | 2021.02.16 |
[인프런 김영한] JPA - 객체지향 쿼리 언어(JPQL, CRITERIA, QueryDSL, 네이티브 SQL, JDBC) (0) | 2021.02.14 |
[인프런 김영한] JPA - 값 타입 컬렉션 (0) | 2021.02.14 |
[인프런 김영한] JPA - 값 타입과 불변 객체 (0) | 2021.02.12 |