Spring Data JPA (14) 썸네일형 리스트형 3월 22일 SpringDataJPA 페이징과 정렬 SpringDataJPA 페이징과 정렬 순수 JPA 페이징과 정렬 예제 조건 검색조건 , 나이가 10살, 정렬조건 , 이름으로 내림차순 페이징조건 , 첫번째페이지 , 페이지량을 보여줄 데이터 3건 Repository public List findByPage(int age , int offset , int limit){ return em.createQuery( "select m from Member m where m.age = :age" + " orderBy m.username desc") .setFirstResult(offset) .setMaxResults(limit) .getResultList() } public long totalCount(int age){ return em.createQuery( ".. 3월 21일 SpringDataJPA 반환타입 SpringDataJPA 반환타입 List findByUsername(String name) //컬렉션을 반환 Member findByUsername(String name) //단건 조회 Optional findByUsername(String name) // Optional 단건 List로 값을 받을때 만약 찾는 값이 없다면 null이 아니라 빈 Collection을 반환한다. empty컬렉션을 반환한다. 단건 조회의 경우 값이 없으면 null , 2개이상 있으면 Exception을 반환한다. 그래서 Optional은 null이어도 Empty를 반환하기 때문에 결과값이 있을수도 있고 없을수도 있을댄 Optional을 사용한다, 3월 21일 SpringDataJPA 리포지토리에 메소드 구현 @Query 리포지토리 메소드 구현하기(정적쿼리) Repository에 JPQL바로 구현하기 @Query("select m from Member m where m.username =:username and m.age = :age" ) List findUser(@Param("username") String username , @Param(age) int age); 이 방법은 JPQL을 바로쓰고 이름도 간결하게 쓸 수 있다. JPQL에 오타가 있으면 애플리케이션 코딩시점에 오류를 반환한다. @Query에 JPQL을 바로 넣어서 해당 메소드 실행시 같이 실행시킬 수 있다. Query값 DTO 조회하기 ( 실무에서 많이사용) 1.Stirng / Int로 받아오는 경우 @Query("select m.usernam.. 3월 21일 Spring Data JPA 쿼리 메소드2 NamedQuery NamedQuery 거의 쓸일 없음. 1.엔티티에 named Query 정의 @NamedQuery( name = "member.findByUsername" query = "select m from Member m where m.username = :username" ) 2.DataJPA를 상속만 Repository에 작성 @Query(name = "Member.findByUsername") // namedQuery 의 name 으로 식별한다. List findByUsername(@Param("username") String username); @Query에 파라미터가 필요한 경우 @Param을 사용한다. 실행하면 해당 named Query가 실행된다. 메소드명이 NamedQuery와 같다면 @Query를.. 3월 21일 SpringDataJPA 쿼리메소드 쿼리메소드 기능 예를 들어 JPARepository에 선언되어있지않은 List findByUsername(String username)와 같이 개별적으로 정의한 메소드의 사용방법. 일반적인 경우 순수 JPA , JPQL을 짜야한다. public List findByUsernameAndAgeGreatorthen(String username , int age){ return em.createQuery( "select m from Member m where m.username =:username and a.age=:age" ).setParameter("username" , username) .setParameter("age" , age) .getResultList(); } Data Jpa로 해결 1.JPARe.. 3월 21일 Spring Data JPA *interface 가 interface를 상속받을때는 Implements가 아닌 extends이다. @NoArgsConstructor(access = AccessLevel.Private) ㄴprivate 생성자를 생성해주는 어노테이션 @ToString(of={"id" , "username" , "age"}) ㄴ toString 생성 , 여기 컬렉션을 적으면 무한루프이기 때문에 컬렉션필드는 적으면 안된다, -순수 JPA기반 리포지토리 만들기 예를들어 member 엔티티와 team엔티티가 있다고 할때 실질적으로 메서드로 만들 기능들은 다들 비슷비슷한데 그 비슷한 기능들을 인터페이스로 묶어 해결한다. 그것이 Spring Data JPA 이다. 공통인터페이스 설정 public Interface MemberRe.. 이전 1 2 다음