[英]How to use Pageable in Jpa
我想在JPA,Java,Datatables.js中进行分页
我的控制器是
@ResponseBody
@RequestMapping(value = "/notice_selectList.do")
public Map<String, Object> notice_selectList(HttpServletRequest request, Model model, @PageableDefault Pageable pageable) throws Exception{
Map<String, Object> paramMap = RequestUtil.getParameterMap(request);
Map<String, Object> resultMap = new HashMap<>();
int length = Integer.parseInt((String) paramMap.get("length")); //한페이지당 보여줄 글 갯수
int start = Integer.parseInt((String) paramMap.get("start")); //시작페이지
int pageLength = (length == 0)?20:length;
int startPage = (start == 0)?1:start + 1;
List<Sort.Order> orders = new ArrayList<Sort.Order>();
orders.add(new Sort.Order(Sort.Direction.DESC, "noticeNo"));
Sort sort = Sort.by(orders);
PageRequest pageRequest = PageRequest.of(startPage, pageLength, sort);
Page<Notice> noticeList = repository.findAll(pageRequest);
//------------- dataTables에 맞게 키값 세팅
//--------------data:데이터
//--------------recordsTotal,recordsFiltered:갯수 및 페이징
resultMap.put("data" , noticeList.getContent());
resultMap.put("recordsTotal" , noticeList.getTotalElements());
resultMap.put("recordsFiltered" , noticeList.getTotalElements());
return resultMap;
}
我的存储库是
public interface NoticeRepository extends JpaRepository<Notice, Long>, QuerydslPredicateExecutor<Banner>{
public Page<Notice> findAll(Pageable pageable);
}
第一页是正确的视图,
select*
from NOTICE
order by NOTICE_NO desc
limit 0, 20
但是如果我单击第二页,结果是
select*
from NOTICE
order by NOTICE_NO desc
limit 400, 20
然后单击第三页,
select*
from NOTICE
order by NOTICE_NO desc
limit 800, 20
为什么会这样呢?
首先,我将调试参数length和start所包含的内容。 如果不是20或40,并且paraMap确实包含这些值,我将通过网络调查我的请求(浏览器中的Dev工具)。 如果它发送正确的值并且开始仍然错误,则发布URL路径,我认为它是一个POST请求,然后在那里查看。
如果您的请求中的值确实为200或400,请查看您的调用前端,也许是一些String Concantation,或者如果您使用Struts,Form Parsing问题。 一个常见的错误是使用组合框或类似的东西的值和索引。 如果在前端中搜索,请使用浏览器开发工具调试请求或表单,在模型中放置断点,然后尝试查明值切换到高数字的位置。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.