简单的java web分页功能实现

本章介绍的是非常简单易懂的分页功能实现,适用数据量不大,以及想学习分页的思想的同学参考

废话不多说。分页的实现功能好几种,有的是把数据直接取出来放在一个定义的list <bean>中,再进行逻辑处理的正确的显示到页面中。同时也有一些现成的框架比如说 thymeleaf模板中也有分页,但是原理都差不多。

我要介绍的传统的分页的思想是,根据数据库的select * from table limit 0,4,这句语句,它的意思是说,查询数据从下标为0的数组到下标为4的这些数据。既是4个数据,下一条就是4,8。以此类推,所以在我们在操作分页的时候,利用这句话,就可以实现分页了。

分页还涉及到首页、跳转到某一页的、尾页的功能,因此我们需要定义一个list集合,用来存放需要分页的数据以及它的总数共有多少条数据,一页分几个数据,能也成几个页面。这些数据

代码呈上。

先定义一个工具类 PageUtil

public class PageUtil<T> {
    //属性
    private int pageNumber;//总记录数
    private int pageCount;//总页数
    private int pageIndex;//当前页
    private int pageSize;//每页大小
    private List<T>list;//当前页的数据
    public int getPageNumber() {
        return pageNumber;
    }
    public void setPageNumber(int pageNumber) {
        this.pageNumber = pageNumber;
    }
    public int getPageCount() {
        return pageCount;
    }
    public void setPageCount(int pageCount) {
        this.pageCount = pageCount;
    }
    public int getPageIndex() {
        return pageIndex;
    }
    public void setPageIndex(int pageIndex) {
        this.pageIndex = pageIndex;
    }
    public int getPageSize() {
        return pageSize;
    }
    public void setPageSize(int pageSize) {
        this.pageSize = pageSize;
    }
    public List<T> getList() {
        return list;
    }
    public void setList(List<T> list) {
        this.list = list;
    }
}

数据查询的代码,用的是mybatis持久层,我分的是8条一页

<!--这是请假事务总数查询的代码-->
<select id="pageCount" resultType="int">
    select count(*) from leave_affair
</select>
<!--这是总请假事务分页的查询代码-->
<select id="findLeavePage" parameterType="int" resultType="Model.Student">
    SELECT leave_affair.sno,sclass,sname,reason,longtime,status,starttime,endtime
   from student,leave_affair
   WHERE student.sno=leave_affair.sno limit #{index},8
</select>

Dao和Services(简单的附上主要代码)
@Dao
 */
List<Student> findLeavePage(int index);

/**
 * 这是数量的页数
 * @return
 */
int pageCount();
@Service
@Override
public int getPageCount() {
    return userDao.pageCount();
}

@Override
public List<Student> findLeavePage(int index) {
    return userDao.findLeavePage(index);
}
这是一个测试类的Controller
@RequestMapping("/getLeaveYes.do")
public ModelAndView testPage(HttpServletRequest request, Model model){
    //pageIndex是分页的时候需要的参数
    if (request.getParameter("pageIndex") != null) {
        pageIndex = Integer.parseInt(request.getParameter("pageIndex"));
    }//对页面上的分页标签传的值,进行获取,也是就点击'上一页或者下一页'传过来的pageindex
    pageUtil.setPageIndex(pageIndex);//保存至工具类
    number = userService.getPageCount();//调用service层方法计算出总数据量,就是多少条数据.
    pageUtil.setPageNumber(number);//保存至工具类
    pageUtil.setPageSize(pageSize);//保存至工具类

    pageUtil.setPageCount((int) Math.ceil((double) (pageUtil
            .getPageNumber() / pageUtil.getPageSize())) + 1);//计算出总页数,并封装到工具类
    int index = (pageIndex - 1) * pageSize;//计算出每一页从数据库中第几条数据开始取值,也就是limit后面的第一个数字
    list = userService.findLeavePage(index);//调用service层的方法,取得数据库中的值
    pageUtil.setList(list);//保存到工具类中的集合
    model.addAttribute("url","getLeaveYes.do");//这是传递一个页面中的URL
    model.addAttribute("pageUtil", pageUtil);//传递到页面,存入值栈中
    ModelAndView mv=new ModelAndView("teacher/T_student_affair");
    mv.addObject("pageUtil",pageUtil);
    return mv;
}

接下来的是页面,用的是jsp,用了JSTL(Java server pages standarded tag library,即JSP标准标签库)

 

<c:forEach items="${pageUtil.list}" var="list">
    <tr>
        <td>${list.sno}</td>
        <td>${list.sclass}</td>
        <td>${list.sname}</td>
        <td>${list.reason}</td>
        <td>${list.longtime}</td></tr>
<!--这是分页div-->
<div id="page all" style="font-size: 19px">
    <b>共${pageUtil.pageNumber}</b>条,当前第<span>${pageUtil.pageIndex}</span>页
    <a href="${url}?pageIndex=1" class='first'>首页</a>
    <a href="${url}?pageIndex=${pageUtil.pageIndex>1?pageUtil.pageIndex-1:1}" class='pre'>上一页</a>
    <c:forEach begin="1" end="${pageUtil.pageCount}" var="i">
        <a href="tech/${url}?pageIndex=${i}" style="text-decoration: none;">${i}</a>
    </c:forEach>
    <a href="${url}?pageIndex=${pageUtil.pageIndex<pageUtil.pageCount?pageUtil.pageIndex+1:pageUtil.pageCount}" class='next'>下一页</a>
    <a href="${url}?pageIndex=${pageUtil.pageCount}" class='last'>末页</a>
</div>

分页的div就是利用查询工具中的PageUtil,以及传递到Controller中的两个参数,URL和pageIndex,页数来判断,是否还有数据查询。有的话就构造完整的数据库查询语句。

 

 

 

 

 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值