最近做了个springboot项目,用到了分页,经过几天的浏览博客,终于有点头绪解决了分页的问题。希望能给大家带来帮助
目录
- 前台代码
- 后台代码
1、html层
<script type="text/javascript" th:inline="none">
layui.use(['table','layer','form','laydate'], function(){
var table = layui.table;
var layer = layui.layer;
var form = layui.form;
var laydate = layui.laydate;
//方法级渲染
table.render({
elem: '#busTableId'//这里放的是表格的id
,url: 'http://localhost:8080/bookbus/orderList'
,cols: [
[
{checkbox: true, fixed: true}
,{field:'id', title: 'ID', width:180, sort: true, align:'center'}
,{field:'startPoint', title: '起点', width:180, align:'center', edit: 'text'}
,{field:'endPoint', title: '终点', width:100, align:'center', edit: 'text'}
,{field:'startTime', title: '开始时间', width:100,sort: true, align:'center'}
,{field:'endTime', title: '结束时间', width:104,sort: true, align:'center'}
,{field:'price', title: '票价', width:124,sort: true, align:'center'}
,{field:'amount', title: '数量',width:104,sort: true, align:'center',event: 'setSign', style:'cursor: pointer;'}
,{width:136, title:'操作', align:'center', toolbar: '#barlist'}
]
]
,id:'testReload'
,limits:[5,10,15,20,25]
,height: 470
,page: true
});
</script>
2、controller层
/**
* 分页查询订单信息
* @param page
* @param limit
* @return
*/
@ResponseBody
@RequestMapping("/orderList")
public Map<String,Object> orderList(@RequestParam(value="page",required=false)Integer page,@RequestParam(value="limit",required=false)Integer limit){
Map<String,Object> resultMap=new HashMap<>();
Map map=new HashMap();
Page<BusOrder> pageList = bookBusService.findSearch(map, page, limit);
resultMap.put("code", 0);
resultMap.put("count", pageList.getTotalElements());
resultMap.put("data", pageList.getContent());
return resultMap;
}
3、service层
/**
* 条件查询+分页
* @param whereMap
* @param page
* @param size
* @return
*/
public Page<BusOrder> findSearch(Map whereMap, int page, int size) {
Specification<BusOrder> specification = createSpecification(whereMap);
PageRequest pageRequest = PageRequest.of(page-1, size);
return busDao.findAll(specification, pageRequest);
}
/**
* 动态条件构建
* @param searchMap
* @return
*/
private Specification<BusOrder> createSpecification(Map searchMap) {
return new Specification<BusOrder>() {
@Override
public Predicate toPredicate(Root<BusOrder> root, CriteriaQuery<?> query, CriteriaBuilder cb) {
List<Predicate> predicateList = new ArrayList<Predicate>();
// id
if (searchMap.get("id")!=null && !"".equals(searchMap.get("id"))) {
predicateList.add(cb.like(root.get("id").as(String.class), "%"+(String)searchMap.get("id")+"%"));
}
// 开始地点
if (searchMap.get("startPoint")!=null && !"".equals(searchMap.get("startPoint"))) {
predicateList.add(cb.like(root.get("startPoint").as(String.class), "%"+(String)searchMap.get("startPoint")+"%"));
}
// 结束地点
if (searchMap.get("endPoint")!=null && !"".equals(searchMap.get("endPoint"))) {
predicateList.add(cb.like(root.get("endPoint").as(String.class), "%"+(String)searchMap.get("endPoint")+"%"));
}
// 开始时间
if (searchMap.get("startTime")!=null && !"".equals(searchMap.get("startTime"))) {
predicateList.add(cb.like(root.get("startTime").as(String.class), "%"+(String)searchMap.get("startTime")+"%"));
}
// 结束时间
if (searchMap.get("endTime")!=null && !"".equals(searchMap.get("endTime"))) {
predicateList.add(cb.like(root.get("endTime").as(String.class), "%"+(String)searchMap.get("endTime")+"%"));
}
return cb.and( predicateList.toArray(new Predicate[predicateList.size()]));
}
};
}
4、dao层,直接继承JPA接口即可,不用写,直接调用即可
Page<T> findAll(@Nullable Specification<T> var1, Pageable var2);
实现分页效果: