EntityManager 객체 createQuery 메소드를 사용해 쿼리문을 만들어 줄 수 있다.
select 문으로 데이터 조회 후 List, Stream, 단건 데이터 3가지 방식으로 결과를 가져올 수 있다.
메소드
설명
getResultList
select 문 실행후 여러 Row 결과 데이터를 List로 반환한다.
getResultStream
select 문 실행후 여러 Row 결과 데이터를 Stream 으로 반환한다.
getSingleResult
select 문 실행후 한 Row 결과 데이터를 반환한다.
// Read public List<Member> findAll() { // JPQL List<Member> result = em.createQuery("select m from Member m", Member.class) .getResultList(); return result; }
publiclongcount() { return em.createQuery("select count(m) from Member m", Long.class) .getSingleResult(); }
public List<Member> findByUsernameAndAgeGreaterThan(String username, int age) { return em.createQuery("select m from Member m " + "where m.username = :username " + "and m.age > :age") .setParameter("username", username) .setParameter("age", age) .getResultList(); }
Query 어노테이션을 이용하면 인터페이스 메소드에 JPQL 을 바로 정의할 수 있다. 쿼리문에 오타가 있어도 Application 로딩 시점에 파싱을 진행해 오류를 잡아준다.
@Query("select m from Member m where m.username = :username and m.age = :age") List<Member> findUser(@Param("username") String username, @Param("age")int age);