[SpringBoot / JPA ] Paging, @Param, @Query, Repository, withNano

🐷Jinie (juniorDeveloper)·2021년 2월 23일
2

개발자적응기

목록 보기
1/2
post-custom-banner

요즘 회사에 적응하느라 기술블로그 작성에 소홀했다ㅠㅠ
앞으로 좀 더 반성하고 공부하면서 계속 잊어버리는 부분이나,
새롭게 알게된 내용을 정리하려고 한다!!

0. JPA

  • ※결국 인터페이스이기 때문에 JPA를 사용하기 위해서는 JPA를 구현한 Hibernate, EclipseLink, DataNucleus 같은 ORM 프레임워크를 사용해야 한다.
  • 장점
    : 1) 생산성이 뛰어나고 유지보수가 용이하다.(데이터베이스 중심 설계에서 객체 중심 설계로 변경됨에 따른)
    2) DBMS에 대한 종속성이 줄어든다.

1. Paging 기능

  • PagingAndSortingRepository는 CrudRepository를 상속하고 있는 인터페이스이다. PagingAndSortingRepository는 페이징 처리를 위한 메소드를 제공하고 있다.
  • Page는 0부터 시작한다.
  • pageable
* 코드설명 *
: Page, Size, Sort, Property 순으로 PageRequest.of 의 인자로 대입되었다.
  "asc"와 문자열이 같은지 Boolean -> equalIgnoreCase는 대소문자와 무관하게 문자열동등 비교가 진행된다.
   삼항연산자를 이용해서 Boolean ? True : False 순으로 비교하고 return한다.
   Command에 default 값을 설정했더라도 불러오지 않으면 Pageable에 당연히 넣을 수 없다. 
   따라서 Pageable에 값을 넣기 위해 Command Model에서 getPage 와 getSize를 진행한다.

* 코드설명 *
Pageable을 인자로 받은 메서드는 return을 Page<> 형태로 진행된다.
따라서, Repository에서 페이징 기능을 위해 Pageable을 이용해 Page<>를 return했다면, 
ServiceImple (서비스구현체) 에서 원하는 최종 return 타입으로 변환하도록 해야한다.
  • PageRequest(int page, int size, Direction sort, String property)
    : 찾을 page와 한 페이지의 size를 필수 인자로 받는다.**
    정렬해서 paging을 하는 경우에, Sort를 생성자 인자로 추가해서 PageRequest를 생성할 수 있다.

2. @Query

  • 좀 더 구체적인 조건 등을 지정하기 위해서 Spring Data JPA는 쿼리 메소드 대신에 @Query(쿼리 어노테이션)을 이용한다.
SELECT p FROM queryTable p WHERE p.type IS NULL OR p.type = :type
* 코드설명 *
@Query 어노테이션 안에 SQL 쿼리문을 String 형태로 넣어준다.
테이블명에 별칭을 지정한다.
파라미터로 넘어오는 변수는 ':변수명' 으로 매핑된다.

3. Repository

JPA 처리를 담당하는 Repository는 기본적으로 4가지가 있다.
(T : Entity의 타입클래스, ID : P.K 값의 Type)
1) Repository<T, ID>
2) CrudRepository<T, ID>
3) PagingAndSortingRepository<T, ID>
4) JpaRepository<T, ID>
  • Repository에 Object를 넣을 수 없었다.
* 코드설명 *
넘어오는 파라미터가 객체 어디에 매핑되는 건지 정확하게 정의해서 넘겨주어야한다.

3-1. @param

  • Parameter를 뒤에 지정한 변수에 자동으로 넣어줄 수 있다.

4. withNano(0)

  • public LocalDateTime withNano(int nanoseconds)
profile
ᴘᴇᴛɪᴛs ᴅᴇ́ᴠᴇʟᴏᴘᴘᴇᴜʀ. ᴘʀᴏɢʀᴀᴍᴍᴀᴛɪᴏɴ = ᴘʟᴀɪsɪʀ 💕
post-custom-banner

0개의 댓글