develog

Spring Data JPA 본문

카테고리 없음

Spring Data JPA

냐옴 2021. 9. 8. 17:11

MemberRepository

import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;

public interface MemberRepository extends JpaRepository<Member, Long> {

    // 메소드 이름만 사용
    List<Member> findByUsername(String username);

    // Entity 리턴
    @Query("select m from Member m" +
            " where m.username = :username2" +
            " and m.age = :age2")
    List<Member> findEntity(@Param("username2") String username, @Param("age2") int age);

    // 값 리턴
    @Query("select m.username" +
            " from Member m" +
            " where m.username = :username")
    List<String> findValue(@Param("username") String username);

    // DTO 리턴
    @Query("select new study.datajpa.dto.MemberDto(m.id, m.username, t.name)" +
            " from Member m" +
            " join m.team t")
    List<MemberDto> findDto();

    // 컬렉션 파라미터
    @Query("select m from Member m where m.username in :usernames")
    List<Member> findByNames(@Param("usernames") List<String> names);
    
    // 페이징
    @Query(value =
            "select m from Member m" +
                    " where m.age >= :age" +
                    " order by m.username desc",
            countQuery =
                    "select count(m) from Member m" +
                            " where m.age >= :age")
    Page<Member> findByAge(@Param("age") int age, Pageable pageable);

    // bulk update
    @Modifying(clearAutomatically = true)
    @Query(value = "update Member m set m.age = m.age + 1 where m.age >= :age")
    int bulkUpdate(@Param("age") int age);
}

 

Paging Test

@Test
void paging() {
    int age = 40;
    int pageNo = 1;
    int pageSize = 10;

    PageRequest pageRequest = PageRequest.of(pageNo, pageSize);
    Page<Member> memberPage = memberRepository.findByAge(age, pageRequest);

    long totalCount = memberPage.getTotalElements();
    int totalPage = memberPage.getTotalPages();
    int pageNum = memberPage.getNumber();
    int pageCount = memberPage.getNumberOfElements();
    int size = memberPage.getSize();
    boolean empty = memberPage.isEmpty();
    boolean first = memberPage.isFirst();
    boolean last = memberPage.isLast();
    List<Member> members = memberPage.getContent();

    System.out.println("totalCount = " + totalCount);
    System.out.println("totalPage = " + totalPage);
    System.out.println("pageNum = " + pageNum);
    System.out.println("pageCount = " + pageCount);
    System.out.println("size = " + size);
    System.out.println("empty = " + empty);
    System.out.println("first = " + first);
    System.out.println("last = " + last);
    for (Member member : members) {
        System.out.println("member = " + member);
    }
}
Comments