Java Web分页功能详解,大厂面试参考指南v1.0

先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7

深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年最新Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
img
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上Java开发知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以添加V获取:vip1024b (备注Java)
img

正文

  • 计算得到尾页

  • @return

*/

public int getLast(){

int last;

// 假设总数是50,是能够被5整除的,那么最后一页的开始就是45

if (0 == total % count)

last = total - count;

// 假设总数是51,不能够被5整除的,那么最后一页的开始就是50

else

last = total - total % count;

last = last<0?0:last;

return last;

}

/* getter and setter */

}


前台实现分页设计


首先我们在前台需要完成我们分页条的设计,这里可以直接引入 Bootstrap 来完成:

上面是使用 Bootstrap 实现一个分页条的简单例子,如果不熟悉的童鞋可以去菜鸟教程中查看:点这里


简单版本的分页条

为了便于理解,我们先来实现一个简单版本的分页条吧:

  • 首页超链:指向了 start 为 0 的首页
  • «

    • 上一页超链:
    • 下一页超链:
    • 最后一页超链:指向了最后一页
  • »

    • 中间页:

    <c:forEach begin=“0” end=“${page.totalPage-1}” varStatus=“status”>

  • ${status.count}

    </c:forEach>

    • 所以写完看起来会是这样子的:
    • «

    • <c:forEach begin=“0” end=“${page.totalPage-1}” varStatus=“status”>

    • ${status.count}

      </c:forEach>

    • »

      • 存在的问题:

      ① 没有边界判断,即在首页仍然可以点击前一页,不符合逻辑也影响用户体验

      ② 会显示完所有的分页,即如果 totalPage 有50页,那么分页栏将会显得特别长,影响体验


      改良版本的分页条

      1.写好头和尾

        2.写好« 这两个功能按钮

        使用 <c:if>标签来增加边界判断,如果没有前面的页码了则设置为disable状态

        «

        再通过 JavaScrip 代码来完成禁用功能:

        3.完成中间页码的编写

        <c:forEach begin=“0” end=“${page.totalPage-1}” varStatus=“status”>

        <c:if test=“${status.countpage.count-page.start<=30 && status.countpage.count-page.start>=-10}”>

        <a

        href=“?page.start=${status.index*page.count}”

        <c:if test=“${status.index*page.count==page.start}”>class=“current”</c:if>

        ${status.count}

        </c:if>

        </c:forEach>

        0 循环到 page.totalPage - 1varStatus 相当于是循环变量

        • status.count 是从1开始遍历

        • status.index 是从0开始遍历

        • **要求:**显示当前页码的前两个和后两个就可,例如当前页码为3的时候,就显示 1 2 3(当前页) 4 5 的页码

        • 理解测试条件:

        -10 <= 当前页*每一页显示的数目 - 当前页开始的数据编号 <= 30

        • 只要理解了这个判断条件,其他的就都好理解了
        • 注意: 测试条件是需要根据项目的需求动态改变的,不是万能的!

        后台中的分页


        首页在项目中引入上面提到的 Page 工具类,然后我们在 DAO 类中使用 LIMIT 关键字来查询数据库中的信息:

        public List list() {

        return list(0, Short.MAX_VALUE);

        }

        public List list(int start, int count) {

        List students = new ArrayList<>();

        String sql = “SELECT * FROM student ORDER BY student_id desc limit ?,?”;

        try (Connection c = DBUtil.getConnection(); PreparedStatement ps = c.prepareStatement(sql)) {

        ps.setInt(1, start);

        ps.setInt(2, count);

        // 获取结果集…

        } catch (SQLException e) {

        e.printStackTrace();

        }

        return students;

        }

        在 Servlet 中获取分页参数并使首页显示的 StudentList 用 page 的参数来获取:

        // 获取分页参数

        int start = 0;

        int count = 10;

        try {

        start = Integer.parseInt(req.getParameter(“page.start”));

        count = Integer.parseInt(req.getParameter(“page.count”));

        } catch (Exception e) {

        }

        Page page = new Page(start, count);

        List students = studentDAO.list(page.getStart(), page.getCount());

        // 共享数据

        req.setAttribute(“page”, page);

        req.setAttribute(“students”, students);

        以上即可完成分页功能,但这是基于 Servlet 的版本,在之前写过的项目(学生管理系统(简易版))中实际的使用了这种方法,感兴趣的可以去看一下。


        SSM 中的分页


        在 SSM 项目中,我们可以使用 MyBatis 的一款分页插件: PageHelper 来帮助我们更加简单的完成分页的需求,官网在这里: PageHelper

        在这里,我们演示一下如何使用上面的工具重构我们之前写过的 SSM 项目 —— 学生管理系统-SSM 版

        第一步:添加相关 jar 依赖包

        PageHelper 需要依赖两个 jar 包,我们直接在 pom.xml 中增加两个 jar 包依赖:

        com.github.pagehelper

        pagehelper

        5.1.2-beta

        com.github.jsqlparser

        jsqlparser

        1.0

        第二步:配置相关环境

        在 MyBatis 的 SessionFactory 配置中新增加一个属性名 plugins 的配置:

        总结

        上述知识点,囊括了目前互联网企业的主流应用技术以及能让你成为“香饽饽”的高级架构知识,每个笔记里面几乎都带有实战内容。

        很多人担心学了容易忘,这里教你一个方法,那就是重复学习。

        打个比方,假如你正在学习 spring 注解,突然发现了一个注解@Aspect,不知道干什么用的,你可能会去查看源码或者通过博客学习,花了半小时终于弄懂了,下次又看到@Aspect 了,你有点郁闷了,上次好像在哪哪哪学习,你快速打开网页花了五分钟又学会了。

        从半小时和五分钟的对比中可以发现多学一次就离真正掌握知识又近了一步。

        人的本性就是容易遗忘,只有不断加深印象、重复学习才能真正掌握,所以很多书我都是推荐大家多看几遍。哪有那么多天才,他只是比你多看了几遍书。

        网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

        需要这份系统化的资料的朋友,可以添加V获取:vip1024b (备注Java)
        img

        一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

        总结

        上述知识点,囊括了目前互联网企业的主流应用技术以及能让你成为“香饽饽”的高级架构知识,每个笔记里面几乎都带有实战内容。

        很多人担心学了容易忘,这里教你一个方法,那就是重复学习。

        打个比方,假如你正在学习 spring 注解,突然发现了一个注解@Aspect,不知道干什么用的,你可能会去查看源码或者通过博客学习,花了半小时终于弄懂了,下次又看到@Aspect 了,你有点郁闷了,上次好像在哪哪哪学习,你快速打开网页花了五分钟又学会了。

        从半小时和五分钟的对比中可以发现多学一次就离真正掌握知识又近了一步。

        [外链图片转存中…(img-E8vdAomL-1713606316031)]

        人的本性就是容易遗忘,只有不断加深印象、重复学习才能真正掌握,所以很多书我都是推荐大家多看几遍。哪有那么多天才,他只是比你多看了几遍书。

        网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

        需要这份系统化的资料的朋友,可以添加V获取:vip1024b (备注Java)
        [外链图片转存中…(img-au0y1Tx3-1713606316032)]

        一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

      • 15
        点赞
      • 8
        收藏
        觉得还不错? 一键收藏
      • 0
        评论
      评论
      添加红包

      请填写红包祝福语或标题

      红包个数最小为10个

      红包金额最低5元

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

      抵扣说明:

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

      余额充值