JPQL
- 권장, 실무사용, 거의 모든 문제 해결 가능QueryDSL
-> JPQL 보완, 권장, 실무사용, 쿼리 허용범위 가장 넓음엔티티 객체
를 중심으로 개발검색 쿼리
이다.엔티티 객체를 대상으로 검색
한다.JPA
는 SQL을 추상화한 JPQL이라는 객체 지향 쿼리 언어
제공SQL과 문법 유사
, select, from, where, group by, having, join 지원JPQL
은 엔티티 객체를 대상
으로 쿼리 작성
SQL
은 데이터베이스 테이블을 대상
으로 쿼리 작성SQL을 추상화
해서 특정 데이터베이스에 의존하지 않음JPQL을 분석
해서 적절한 SQL을 만들어
데이터베이스를 조회클래스 명을 기본값
으로 사용(추천)별칭을 필수
select
select절
from절
where절
group by절
having 절
order by 절
update
update 절
where 절
delete
delete절
where절
TypedQuery
: 반환 타입이 명확할 때 사용
TypedQuery<Member> query =
("select m from member m", Member.class)
TypedQuery<String> query =
("select m.username from member m", Stringclass)
Query
: 반환 타입이 명확하지 않을 때 사용 (String, int)
Query query =
("select m.username, m.age from member m")
query.getResultList()
query.getSingleResult()
-> 조심해서 사용해야함 -> 값이 하나도 없을경우 일부러 예외발생시켜야 할 경우 사용하면 좋다.public class JpaMain6 { public static void main(String[] args) { EntityManagerFactory emf = Persistence.createEntityManagerFactory("hello"); EntityManager em = emf.createEntityManager(); EntityTransaction tx = em.getTransaction(); tx.begin(); try { List<Member> result = em.createQuery("select m from Member m where m.username like '%kim%'", Member.class).getResultList(); for(Member member : result) { System.out.println("member = " + member); } //TypedQuery // 타입 정보가 Member로 명확할 때 TypedQuery<Member> query = em.createQuery("select m from Member m", Member.class); // 타입정보가 String.class로 반환이 명확할 때 TypedQuery<String> query2 = em.createQuery("select m.username from Member m", String.class); //m.username(String), m.age(int) : 이렇게 반환타입이 명확하지 않을 때 Query query3 = em.createQuery("select m.username, m.age from Member m"); // getResultList() TypedQuery<Member> query4 = em.createQuery("select m from Member m",Member.class); List<Member> resultList = query4.getResultList(); // 결과값 하나일때, getSingleResult() TypedQuery<Member> query6 = em.createQuery("select m from Member m where m.id = 10",Member.class); Member result2 = query6.getSingleResult(); tx.commit(); } catch (Exception e) { tx.rollback(); }finally { em.close(); emf.close(); } } }
public class JpaMain7 { public static void main(String[] args) { EntityManagerFactory emf = Persistence.createEntityManagerFactory("hello"); EntityManager em = emf.createEntityManager(); EntityTransaction tx = em.getTransaction(); tx.begin(); try { Member member = new Member(); member.setUsername("member1"); member.setAge(10); em.persist(member); // 파라미터 바인딩 - 이름기준 TypedQuery<Member> query = em.createQuery("select m from Member m where m.username = :username", Member.class); query.setParameter("username", "member1"); Member result = query.getSingleResult(); System.out.println("result : " + result.getUsername()); // 파라미터 바인딩 - 위치기반(쓰지말것) Member result = em.createQuery("select m from m where m.username = ?1", Member.class) .setParameter(1, "member1") .getSingleResult(); System.out.println("result : " + result.getUsername()); tx.commit(); } catch (Exception e) { tx.rollback(); }finally { em.close(); emf.close(); } } }