JPQL 문법
- select m from Member as m where m.age > 18
- 클래스명은 자바문법대로 대문자로 해야한다. 필드명은 소문자로 사용한다.
- JPQL 키워드는 대소문자 구문 하지 않는다.
- 엔티티의 이름을 사용한다 . 테이블 이름이 아니다 .
- 별칭은 필수다 (as 생략가능 )
- Ansi sql의 표준 집합과 정렬 함수들을 제공한다 . (COUNT() , SUM() , AVG() , MAX() , MIN)
TypedQuery와 Query
TypedQuery 타입은 반환 타입이 명확할 때 사용한다.
TypedQuery<Member> query1 = em.createQuery("select m from Member m ", Member.class);
- 리턴받는 타입이 명확하다 . 두번째 파라미터는 리턴 받을 타입 정보를 적으면된다
Query 타입은 반환 타입이 명확하지 않을 때 사용한다.
Query query1 = em.createQuery("select m.name, m.age from Member m ");
- 리턴 타입 정보가 명확하지 않다 .
결과 조회 API
query.getResultList(): 결과가 하나 이상일 떄 , 리스트 반환 결과가 없으면 빈 리스트 반환
query.getSingleResult() : 결과가 정확히 하나여야한다. 단일 객체 반환
- 결과가 없으면 javax.persitence.NoResultException
- 결과가 여러개면 javax.persitence.NonUniquerResultExcetion
이 발생 한다.
파라미터 바인딩
Member member = new Member("user1" , 20);
em.persist(member);
//?1 (숫자기준표기)
Member username = em.createQuery("select m from Member m where m.username = :username ", Member.class)
.setParameter("username", member.getUsername()) //파라미터 바인딩 이름기준
//setParameter(1,usernameParam)// 숫자기준
.getSingleResult();
System.out.println("username = " + username.getUsername());
숫자기준과 이름기준 두가지 방식이 있는데 숫자기준은 중간에 추가 되거나 하면 숫자가 밀릴 수도 있고 불편하기 때문에 이름기준으로 하는 것이 좋다 .
'JPA' 카테고리의 다른 글
JPA 공부 15 - JPQL . 3 페이징 (0) | 2021.06.06 |
---|---|
JPA 공부 14 - JPQL . 2 프로젝션 (0) | 2021.06.06 |
JPA 공부 13 - 직접 쿼리를 작성하는 방법 (0) | 2021.06.06 |
JPA 공부 12 - 값 타입 collection 사용 (0) | 2021.06.06 |
JPA 공부 11 - JPA 데이터 타입 분류 (임베디드 타입) (0) | 2021.06.05 |