先加入依赖
<!-- 分页处理引入包 -->
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper-spring-boot-starter</artifactId>
<version>1.2.3</version>
</dependency>
注意: 如果后面按照代码进行编写代码后没办法进行分页,先看逻辑是否有问题,没问题后关注一下导入的分页依赖,我上面的分页依赖适用于IDEA2018版本,如果无法分页自行找一下对应版本的分页依赖
前台代码如下:
html:
<center>
<h4 style="color: #49b4d0">共[[${page.total}]]条</h4>
<button class="linkspan" id="one" th:if="${page.pageNum > 1}">首条</button>
<button class="linkspan" id="two" th:if="${page.pageNum > 1}">上一条</button>
<button class="linkspan" id="three" th:if="${page.pageNum < page.pages}">下一条</button>
<button class="linkspan" id="four" th:if="${page.pageNum != page.pages}">末条</button>
</center>
js:
<script th:inline="javascript">
$(function() {//分页操作
$(".linkspan").click(function () {
var pageNo = [[${page.pageNum}]]; //当前页号
var totalPageNum = [[${page.pages}]]; //总的页数
if (String($(this).attr("id")) == String("one"))
pageNo = 1;
if (String($(this).attr("id")) == String("two"))
pageNo = pageNo - 1;
if (String($(this).attr("id")) == String("three"))
pageNo = pageNo + 1;
if (String($(this).attr("id")) == String("four"))
pageNo = totalPageNum;
if (String($(this).attr("id")) == String("five")) {
var num = $.trim($("#pageNo").val());
if (!re.test(num)) {
alert("输入的不是数字!");
return;
}
pageNo = parseInt(num);
if (pageNo < 1 || pageNo > totalPageNum) {
alert("页号超出范围,有效范围:[1-" + totalPageNum + "]!");
return;
}
}
var act="?pageNo="+pageNo;
$(location).attr("href", alink+act); //alink表示当前页面的链接,如:"http://localhost:8080/law/criminallaw/" + partId;(partId表示一个动态的值,可以看一下后面的@Request)
//act:?pageNo=pageNo 表示将当前是第几页传进去
//综上:其实每次跳转页都会访问一下后台,后台再将传入的对应的页数找到对应的条数。
return false;
});
});
</script>
后台代码传对应的page给前台:
@RequestMapping("/criminallaw/{partId}")
public String criminallaw(@PathVariable("partId") String partId, @RequestParam(value = "pageNo", required = false, defaultValue = "1") String pageNoStr, Map<String, Object> map, LawQueryHelper helper, HttpSession session){
int pageNo = 1;
if(partId.equals("0")){
if(session.getAttribute("partId")!=null){
partId=session.getAttribute("partId").toString();
}
}
helper.setPartId(partId);
//对 pageNo 的校验
pageNo = Integer.parseInt(pageNoStr);
if (pageNo < 1) {
pageNo = 1;
}
PageHelper.startPage(pageNo, 1); //这个要写在对应的查找对象前面
List<CriminalLaw> criminallawlist = lawService.getCriminalLaw(helper);
List<CriminalLaw> chapterlist = lawService.getCriminalChapterName(Integer.parseInt(partId));
PageInfo<CriminalLaw> page = new PageInfo<CriminalLaw>(criminallawlist);
String alink = "http://localhost:8080/law/criminallaw/" + partId;
//后台和前台之间是通过map进行数据交互
map.put("alink", alink);
map.put("page", page);
return "law/criminallaw/criminallaw";
}
附分页背后逻辑
数据库每一行数据对象都有对应的rownum,并不是按照我们的逻辑进行的,而是系统根据录入先后去定义的
如我录入学号为1,2,3,4,5的同学,但学号为1,2,3,4,5对应的rownum可能是2,3,1,5,4(假设)
分页是通过rownum去找到对应页数的数据,参考如下Oracle语句
select * from (select B.*,rownum as row_index from B where row_index >= (page.pagenum-1)*page.pageSize+1 and row_index <= page.pagenum*page.pageSize);
注:page.pagenum表示想找的页数
page.pageSize表示一页的数量
如要pageSize为5,取第一页
(page.pagenum-1)*page.pageSize+1 即为(1-1)5=1即从第1条开始
(page.pagenum-1)page.pageSize+1 即为15=5即第5条结束
注意: rownum从1开始,第一条是1,不是0