Spring21 [Data JPA] 순수 JPA 페이징과 정렬 스프링 데이터 JPA는 다양한 유형의 반환 타입을 지원한다. List findListByUsername(String username); //컬렉션 Member findMemberByUsername(String username); //단건 Optional findOptinalByUsername(String username); //단건 Optional 페이징 조건 검색 조건 : 나이 10살 정렬 조건 : 이름 내림차순 페이징 조건 : 첫번째페이지, 페이지 당 데이터 3건 순수 JPA에서 페이징을 하는 방법 //순수 JPA 페이징 public List findByPage(int age,int offset, int limit) { return em.createQuery("select m from Member m.. 2021. 4. 23. [DataJPA] @Query, 레포지토리에 쿼리를 정의 메소드명으로 쿼리를 생성하는 방법은 메소드명이 너무 길어질 수 있다는 단점이 있다. 지금 소개하는 방법은 복잡한 JPQL을 인터페이스안에 있는 메서드에 바로 적을 수 있고 메서드명은 짧게 할 수 있다. public interface MemberRepository extends JpaRepository { //NamedQuery @Query(name = "Member.findByUsername") List findByUsername(@Param("username") String username); //레포지토리에서 쿼리 삽입 @Query("select m from Member m where m.username = :username and m.age = :age") List findUser(@Param("u.. 2021. 4. 14. [Data JPA] 쿼리 메소드 (메소드명만으로 구현이 가능?!) 만약, JpaRepository 공통의 기능이 아닌 도메인에 특화된 기능을 만드려면 어떻게 해야할까? 이건 우리가 구현해야할까? 아니다! 구현하지 않아도 동작한다. => 쿼리메소드 이용하면 가능 쿼리메소드 기능 3가지 메소드 이름으로 쿼리를 생성한다. 메소드 이름으로 JPA NamedQuery를 호출한다. @Query 어노테이션을 사용해서 레포지토리 인터페이스에 쿼리를 직접 정의할 수 있다. 1. 메소드 이름으로 쿼리를 생성한다. 원래는 이렇게 쿼리를 짜야한다. //회원명과 나이 비교 후 조회 public List findByUsernameAndAgeGreaterThen(String username, int age) { return em.createQuery("select m from Member m w.. 2021. 4. 14. [DataJPA] 스프링 데이터 JPA 인터페이스 공통 인터페이스 설정 JavaConfig 설정 @configuration @EnableJpaRepositories(basePackages = "jpabook.jpashop.repository") //study.datajpa.repository public class AppConfig {} 스프링 부트 사용 시 @SpringBootApplication 위치를 지정하면 (해당 패키지와 하위 패키지를 인식해준다) 스프링 부트 사용 시에는 생략이 가능하다. 만약 위치가 달라지면 @EnableJpaRepositories 필요 어떻게 구현체(메소드 등)없이 save, find 등 기능을 할 수 있는걸까? 스프링 데이터 JPA가 구현 클래스를 대신 생성한다. Spring Data JPA가 로딩시점에 레포지토리에서 구.. 2021. 4. 14. [엔티티파일 작성]엔티티 파일 작성 시 유의사항 및 참고 공부하면서 계속 추가해나갈 예정입니다. 1. 가급적 Setter는 엔티티에 없어야한다. 2. 만약 세터없이 필드값을 바꾸는게 꼭 필요하다면 메소드를 제공하는 것이 더 좋은 방법이다. @Entity @Getter @Setter // 가급적 Setter는 엔티티에 없어야하지만 예제이므로 작성 (실무에서는 꼭 필요한 곳에서만) public class Member { @Id @GeneratedValue private Long id; private String username; //private로 막으면, 프록싱 막힐 수 있는 문제가 있음 | JPA 기본생성자필수 protected Member() { } public Member(String username) { this.username = username; } .. 2021. 4. 10. [TEST 테스트] 테스트 파일 1. 레포지토리 메소드를 작성한 후 Ctrl + Shift + T를 누르고 테스트 파일을 생성할 수 있다. package study.datajpa.repository; import org.assertj.core.api.Assertions; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.transaction.annotation.Transactional; import study.datajpa.Entity.Member; impo.. 2021. 4. 10. 이전 1 2 3 4 다음