MyBatis 分页插件 PageHelper
链接: PageHelper官网.
分页插件支持任何复杂的单表、多表分页;
分页结果(结合了一点BootStrap):
My Environment
- IDEA2018.3
- JDK1.8
- SpringBoot2.3.0
- 360浏览器
Springboot整合PageHelper插件
1. pom.xml引入PageHelper依赖
<!--引入pagehelper分页插件-->
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper-spring-boot-starter</artifactId>
<version>1.2.10</version>
</dependency>
2. 配置application.properties/application.yml
application.properties:
# pagehelper分页插件配置
pagehelper.helperDialect=mysql
pagehelper.reasonable=true
pagehelper.supportMethodsArguments=true
pagehelper.params=count=countSql
application.yml:
# pagehelper分页插件配置
pagehelper:
helperDialect: mysql
reasonable: true
supportMethodsArguments: true
pageSizeZero: false #pageSize=0
有关分页插件的基本配置就完成了(当然其他必要的基本配置也需要提前配置好);
也可以直接参考官网链接: 使用文档.
SpringBoot结合Thymeleaf实现分页
首先我们需要写一个查询数据库然后展示到前端界面的各层代码:
Entity类:
package com.cjw.entity;
import lombok.AllArgsConstructor;
import lombok.NoArgsConstructor;
import lombok.ToString;
import lombok.Data;
import lombok.experimental.Accessors;
import java.util.Date;
@Data
@ToString
@AllArgsConstructor
@NoArgsConstructor
@Accessors(chain = true) //链式调用
public class Emp {
private String id;
private String name;
private Double salary;
private Integer age;
private Date bir;
}
Dao层接口:
package com.cjw.dao;
import com.cjw.entity.Emp;
import org.springframework.stereotype.Repository;
import java.util.List;
@Repository
public interface EmpDao {
List<Emp> findAll();
}
数据库Mapper.xml文件:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.cjw.dao.EmpDao">
<!--查询所有-->
<select id="findAll" resultType="Emp">
select id,name,salary,age,bir from t_emp
</select>
</mapper>
服务层及其实现层:
package com.cjw.service;
import com.cjw.entity.Emp;
import java.util.List;
public interface EmpService {
List<Emp> findAll();
}
package com.cjw.service.Impl;
import com.cjw.dao.EmpDao;
import com.cjw.entity.Emp;
import com.cjw.service.EmpService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
import java.util.UUID;
@Service
public class EmpServiceImpl implements EmpService {
@Autowired
private EmpDao empDao;
@Override
public List<Emp> findAll() {
return empDao.findAll();
}
}
然后只需要在控制层中使用分页插件进行替换,并用model返回至前端:
控制层:
@Controller
public class EmpController {
@Autowired
private EmpService empService;
@GetMapping("emp/findAll")
public String findAll(@RequestParam(defaultValue = "1") int pageNum,
@RequestParam(defaultValue = "5") int pageSize,
Model model){
PageHelper.startPage(pageNum,pageSize);//关键
PageInfo<Emp> pageInfo = new PageInfo<>(empService.findAll());
model.addAttribute("pageInfo",pageInfo);
// List<Emp> emps = empService.findAll();
// model.addAttribute("emps",emps);
return "ems/emplist";
}
前端Html:
<table class="table">
<tr class="table_header">
<td>
ID
</td>
<td>
用户名
</td>
<td>
收入
</td>
<td>
年龄
</td>
<td>
生日
</td>
<td>
操作
</td>
</tr>
<tr th:class="${rowstate.odd}?'row1':'row2'" th:each="emp,rowstate:${pageInfo.list}" >
<td>
<span th:text="${emp.id}"></span>
</td>
<td>
<span th:text="${emp.name}"></span>
</td>
<td>
<span th:text="${emp.salary}"></span>
</td>
<td>
<span th:text="${emp.age}"></span>
</td>
<td>
<span th:text="${#dates.format(emp.bir,'yyyy-MM-dd')}"></span>
</td>
<td>
<!--<a th:href="@{/toSave}">新增</a> -->
<a th:href="@{/emp/update(id=${emp.id})}">更改</a>
<a th:href="@{/emp/delete(id=${emp.id})}">删除</a>
</td>
</tr>
</table>
分页部分:
<div class="modal-footer no-margin-top">
<ul class="pagination pagination-lg">
<li class="page-item"><a class="page-link"><span>当前页为:</span><span th:text="第+${pageInfo.pageNum}+页"></span></a></li>
<!--<li class="page-item"><a class="page-link" th:href="@{/emp/findAll}">首页</a></li>-->
<li><a th:href="@{/emp/findAll?pageNum=0}">首页</a></li>
<li class="page-item"><a class="page-link" th:href="@{/emp/findAll(pageNum=1)}">1</a></li>
<li class="page-item"><a class="page-link" th:href="@{/emp/findAll(pageNum=2)}">2</a></li>
<li class="page-item"><a class="page-link" th:href="@{/emp/findAll(pageNum=3)}">3</a></li>
<li class="page-item"><a class="page-link" th:href="@{/emp/findAll(pageNum=${pageInfo.getNextPage()})}">下一页</a></li>
<li class="page-item"><a class="page-link"><span th:text="共+${pageInfo.pageSize}+页"></span></a></li>
</ul>
</div>
END