// 반환 타입이 명확할 때
TypedQuery<Member> query =
em.createQuery("SELECT m FROM Member m", Member.class);
List<Member> members = query.getResultList();
// 동적 쿼리 바인딩
TypedQuery<Member> query =
em.createQuery("SELECT m FROM Member m WHERE m.username = :username", Member.class);
query.setParameter("username", "member1");
// 반환 타입이 명확하지 않을 때
Query query =
em.createQuery("SELECT m.username, m.age from Member m");
try{
Member member = new Member();
member.setUsername("정환");
member.setAge(37);
em.persist(member);
TypedQuery<MemberDTO> query = em.createQuery("select new hellojpa.jpql.MemberDTO(m.username, m.age) from Member m", MemberDTO.class);
List<MemberDTO> resultList = query.getResultList();
System.out.println("====================");
for(MemberDTO hello : resultList){
System.out.println(hello.toString());
}
System.out.println("====================");
tx.commit();
}
4.페이징 API
List<Member> result = em.createQuery("select m from Member m order by m.age desc", Member.class)
.setFirstResult(1)
.setMaxResults(10)
.getResultList();
System.out.println("result.size() = " + result.size());
for(Member member1 : result){
System.out.println("member1.toString() = " + member1.toString());
}
내부 조인: SELECT m FROM Member m [INNER] JOIN m.team t
외부 조인: SELECT m FROM Member m LEFT [OUTER] JOIN m.team t
세타 조인: select count(m) from Member m, Team t where m.username
= t.name