
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(); } } }