[Datatables] JPA 페이징 처리 예제
- 📕 Programing/Spring
- 2021. 3. 31. 00:33
BoardRepository.java
public List<Board> findPage(int start, int total) {
return em.createQuery("select b from Board b", Board.class)
.setFirstResult(start)
.setMaxResults(total)
.getResultList();
}
setFirstResult : 시작위치
setMaxResults : 출력개수
setFirstResult(10).setMaxResults(10)의 결과는 10번째부터 10개가 출력된다는 의미이다.
BoardService.java
public List<Board> findPage(int start, int total) {
return boardRepository.findPage(start, total);
}
BoardController.java
package com.kyhslam.controller;
import com.kyhslam.domain.Board;
import com.kyhslam.service.BoardService;
import lombok.Data;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.util.MultiValueMap;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.ResponseBody;
import java.util.List;
@Controller
@RequiredArgsConstructor
@Slf4j
public class BoardController {
private final BoardService boardService;
@GetMapping("/index")
public String main(Model model) {
return "index";
}
@PostMapping("/search")
@ResponseBody
public DataTableDto search(DataTableDto dto, @RequestBody MultiValueMap<String,String> formData){
log.info("search =============== ");
int draw = Integer.parseInt(formData.get("draw").get(0));
int start = Integer.parseInt(formData.get("start").get(0));
int length = Integer.parseInt(formData.get("length").get(0));
List<Board> all = boardService.findAll();
log.info("draw :: " + draw);
log.info("start :: " + start);
log.info("length :: " + length);
int total = all.size();
List data = boardService.findPage(start, length);
log.info(" -- " + data.size());
dto.setDraw(draw);
dto.setRecordsFiltered(total);
dto.setRecordsTotal(total);
dto.setData(data);
log.info(" -- " + dto);
return dto;
}
@Data
static class DataTableDto {
private int draw;
private int recordsTotal;
private int recordsFiltered;
private List data;
}
}
index.html
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Hello</title>
</head>
<link href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.5.2/css/bootstrap.css" rel="stylesheet">
<link href="https://cdn.datatables.net/1.10.24/css/dataTables.bootstrap4.min.csshttps://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.5.2/css/bootstrap.css" rel="stylesheet">
<link href="https://cdn.datatables.net/1.10.24/css/dataTables.bootstrap4.min.css" rel="stylesheet">
<!--
https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.5.2/css/bootstrap.css
https://cdn.datatables.net/1.10.24/css/dataTables.bootstrap4.min.csshttps://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.5.2/css/bootstrap.css
https://cdn.datatables.net/1.10.24/css/dataTables.bootstrap4.min.css
-->
<body>
<table id="example" class="table table-striped table-bordered" style="width:100%">
<thead>
<tr>
<th>id</th>
<th>content</th>
<th>writer</th>
</tr>
</thead>
</table>
</body>
<script src="https://code.jquery.com/jquery-3.5.1.js"></script>
<script src="https://cdn.datatables.net/1.10.24/js/jquery.dataTables.min.js"></script>
<script src="https://cdn.datatables.net/1.10.24/js/dataTables.bootstrap4.min.js"></script>
<script>
$(document).ready(function() {
//$('#example').DataTable();
$("#example").DataTable({
"serverSide": true,
"processing": true,
"ajax": {
"url": "/search",
"type": "POST",
"dataSrc": function(res) {
var data = res.data;
return data;
}
},
"columns" : [
{"data": "id"},
{"data": "content"},
{"data": "writer"}
]
});
} );
</script>
</html>
'📕 Programing > Spring' 카테고리의 다른 글
스프링 빈 조회 - 상속관계 (0) | 2021.09.01 |
---|---|
스프링 빈 조회 (0) | 2021.09.01 |
Springboot + JPA + Summernote 예제 - 2 (0) | 2021.03.08 |
Springboot + JPA + Summernote 예제 - 1 (0) | 2021.03.08 |
[Intellij] JSP 연동 후 한글깨짐 현상 (0) | 2021.01.21 |