✅ TypeQuery vs Query ✅ query.getResultList() vs query.getSingleResult()
select m from Member as m where m.age > 18
- 엔티티와 속성은 대소문자를 구분하므로 주의하자. (Member, age)
- JPQL 키워드는 대소문자 구분하지 않는다. (SELECT, FROM, where)
- 테이블 이름이 아닌, 엔티티의 이름을 사용한다. (Member)
- 별칭(m)은 필수이다. (as는 생략가능)
select
COUNT(m), //회원수
SUM(m.age), //나이 합
AVG(m.age), //평균 나이
MAX(m.age), //최대 나이
MIN(m.age) //최소 나이
from Member m
반환 타입이 명확할 때 사용
TypedQuery<Member> query = em.createQuery("SELECT m FROM Member m", Member.class);
👉 반환 타입이 Member 하나뿐이므로 명확
반환 타입이 명확하지 않을 때 사용
Query query = em.createQuery("SELECT m.username, m.age from Member m");
👉 반환 타입이 m.username(string) 과 m.age(int) 두개이므로 명확하지 않음
결과가 하나 이상일 때
TypedQuery<Member> query = em.createQuery("select m from Member m", Member.class);
List<Member> resultList = query.getResultList();
for (Member member1 : resultList){
System.out.println("member1 = " + member1);
}
결과가 정확히 하나일 때
TypedQuery<Member> query = em.createQuery("select m from Member m where m.id = 10", Member.class);
Member result = query.getSingleResult();
System.out.println("result = " + result);
TypedQuery<Member> query2 = em.createQuery("SELECT m FROM Member m where m.username=:username", Member.class);
query2.setParameter("username", "member1");
Member singleResult = query.getSingleResult();
System.out.println("singleResult = " + singleResult.getUsername());