반응형
Kotlin | SpringBoot2.4.2 | JPA | mustache
JPA 페이징 설정
import org.springframework.data.domain.Page
import org.springframework.data.domain.Pageable
import org.springframework.data.jpa.repository.JpaRepository
interface TestRepository: JpaRepository<Test, Int> {
fun findByOrderBySeq(pageable: Pageable): Page<ListVo>?
fun findByTitleOrderBySeq(pageable: Pageable, title: String): Page<ListVo>?
}
- JPA 함수에 Pageable 타입의 파라미터 입력 시, 페이징 정보 들어감.
- 결과값으로 Page<VO> 를 넣어주면, DB 결과 List 및 페이징 정보 함께 전달.
* JPA에서 결과를 Entity를 기본으로 받으나, 원하는 결과만 추출하고 싶을때는 VO 타입을 사용 할 수 있다.
(예, 사용자 정보에서 비밀번호를 빼고 받고 싶을 때, VO로 결과를 받아서 처리)
Controller 설정
import org.springframework.beans.factory.annotation.Autowired
import org.springframework.data.domain.PageRequest
import org.springframework.data.domain.Pageable
import org.springframework.stereotype.Controller
import org.springframework.ui.Model
import org.springframework.web.bind.annotation.*
import javax.servlet.http.HttpServletRequest
import javax.servlet.http.HttpServletResponse
@Controller
@RequestMapping("/test")
class TestViewController {
@Autowired
lateinit var testRepository: TestRepository
@RequestMapping("list")
fun faq(request: HttpServletRequest
, response: HttpServletResponse
, model: Model
, @RequestParam("size", defaultValue = "10") size: Int
, @RequestParam("page", defaultValue = "0") page: Int
, pageable: Pageable
): String {
model.addAttribute("list", testRepository.findByOrderBySeq(PageRequest.of(page, size)))
return "test/list"
}
}
- URL에 [host]/test/list?page=1&size=10 이렇게 주면 JPA 인자에 pageable만 넣어도 됨. (또는 기본값을 사용 하고 싶을때)
- URL에 페이징 타입을 GET으로 선언은 안하기에, 호출 부에 파라미터로 받고, JPA 함수 인자에 PageRequest.of(page,size)로 넣음.
List 정보
{
"result": {
"content": [
{
"seq": 17,
"title": "test17",
"creDttm": "2021-02-18T12:17:10"
},
{
"seq": 16,
"title": "test16",
"creDttm": "2021-02-17T11:13:11"
},
{
"seq": 15,
"title": "test15",
"creDttm": "2021-02-16T10:12:13"
}
],
"pageable": {
"sort": {
"unsorted": true,
"sorted": false,
"empty": true
},
"offset": 0,
"pageNumber": 0,
"pageSize": 3,
"paged": true,
"unpaged": false
},
"last": false,
"totalPages": 6,
"totalElements": 17,
"numberOfElements": 3,
"number": 0,
"first": true,
"sort": {
"unsorted": true,
"sorted": false,
"empty": true
},
"size": 3,
"empty": false
}
}
- 결과를 result에 담아 전달
- result.content : DB 조회 목록 정보
- result.pageable : Page 정보인 듯 하나, 아래 정보 사용.
- result.totalPages : 전체 페이지 수
- result.size : 한 페이지 당 몇개의 목록이 표시 되는지
- result.totalElements : 전체 목록 수
- result.number : 현재 페이지 정보
Form 전송
<form name="pageForm" actoin="/test/list" method="post">
<input type="hidden" name="page" value=""/>
</form>
- 보통 size는 기본값을 사용함으로, 페이지 정보만 넘김.
- post로 넘겨야 URL에 파라미터가 표시 되지 않음.
반응형
'skill > Java.Kotlin' 카테고리의 다른 글
JPA PK 자동 증가일 경우, 등록 방법 (0) | 2021.05.12 |
---|---|
[kotlin] JPA PK 2개 이상 일 때, 설정 및 조회 (0) | 2021.05.12 |
[Kotlin] LocalDateTime 날짜 형식 변경 (DateTimeFormatter) (0) | 2021.05.12 |
LocalDateTime 일 수 계산 (0) | 2021.05.12 |
java.util.regex.PatternSyntaxException: Dangling meta character '*' near index 0 (0) | 2020.09.11 |