基于SpringBoot框架实现分页

先加入依赖

<!-- 分页处理引入包 -->
        <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>&nbsp;
    <button class="linkspan" id="two" th:if="${page.pageNum > 1}">上一条</button>&nbsp;
    <button class="linkspan" id="three" th:if="${page.pageNum < page.pages}">下一条</button>&nbsp;
    <button class="linkspan" id="four" th:if="${page.pageNum != page.pages}">末条</button>&nbsp;
</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

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值