基于SSH框架的分页的实现

14 篇文章 0 订阅
1 篇文章 0 订阅
本文介绍了如何在SSH框架下实现分页功能,包括创建pageBean类来存储分页信息,如总记录数、每页记录数、当前页等,并在DAO层使用Hibernate的回调接口获取数据,最后在service层处理数据并封装到pageBean,再由action层传递到前端展示。
摘要由CSDN通过智能技术生成

今天做项目是用到了分页,所以来记录以下,以便加深印象。

首先创造几个个类或者接口dao(接口),daoImpl,service(接口),serviceIImpl,action,pageBean(用于存放分页信息)

先写pageBean类里面的东西。

首先得明白分页相关的值主要有:1.当前页(前端传过来)2.每页设置的记录数(自己设置)3.总的记录数(从数据库中查出)

4.总页数(通过总记录数和每页记录数求出,作用是在前端页面显示出共几页)5.还有最重要的一个是每页的具体信息,这里存储与list集合中。

所以这里的pageBean类的属性是

    private int allRowCounts;   //这是设置总记录数(在Dao中查的)
    private int pageSize;       //每页记录数
    private int curPage;        //当前页
    private int sumPages;       //总页数
    public List<DaiYeInfo> pageList;  //每页的商品具体信息(这也是在Dao层查找的,在Dao层查到的就不用在在其他地方找)
    pageBean的方法是

1.计算当前页(主要就是对前端传过来的页数进行安全性的限制)

//这是计算当前页
    public static int curPage(int page,int sumPages) {
        if(page==0) {
            return 1;
        }else if(page>sumPages) {
            return sumPages;//当前页不能超过总页数,也不能小于第一页
        }
        return page;    //当前页一定是从1开始的因为你还要计算他的每一页的具体信息
    } 

//这是计算总页数

public static int sumPages(int allRowCounts,int pageSize) {
        if((allRowCounts%pageSize)==0) {
            return allRowCounts/pageSize;
        }else {
            return allRowCounts/pageSize+1;
        }
    }

//获得起始点,为获取每页的分页内容做准备

public static int curoffset(int pageSize,int curPage) {
        return pageSize*(curPage-1);
    }

(还有属性的get、set方法)

//以上是pageBean类的内容,这个类的实例是要被传送到Jsp页面上的,用这个实例就可以获取分页的所有信息。

接下来是dao的实现类(这里接口方法就不写了)

 

/**
     * 第一个方法:根据三个条件查询每页的具体信息
     * hql 查询条件(是全部查询还是跳着查询之类的)
     * off记录起始点
     * len查询数量
     * */

List<DaiYeInfo> list=(List<DaiYeInfo>) this.getHibernateTemplate().execute(
                 
                 //使用Hibernate的回调接口来实现获取session,然后以hibernate的方式来插寻数据,更灵活。
                 new HibernateCallback() {
                    @Override
                    public List doInHibernate(Session s) throws HibernateException {
                            Query query=s.createQuery(hql);
                            query.setFirstResult(off);
                            query.setMaxResults(len);
                            List<DaiYeInfo> daiYeInfos=query.list();
                            return daiYeInfos;
                        }
                       } 
                 );
        return list;
    }

// 上面方法是利用Hibernate的回调函数(下一篇博文会详细讲解),来获取每页的具体信息。

 

    @Override
    public int findAllRowCounts(String hql) {
        List<DaiYeInfo> list=(List<DaiYeInfo>) this.getHibernateTemplate().find(hql);
        return list.size();
    }
//此方法是获取总的记录数,注意dao层里面只写可以从数据库中直接获取到的数据,而间接获取到的就要放在service中进行处理。

到这里dao层就结束了,接下来就是service层将数据处理并封装到pageBean中

 

 

    @Override
    public PageBean queryForPage(int page) {
        int pageSize=10;
        String hql="from DaiYeInfo";
        int allRowCounts=pageDao.findAllRowCounts(hql);
        int sumPages=PageBean.sumPages(allRowCounts, pageSize);
        int curPage=PageBean.curPage(page,sumPages);
        int curoffset=PageBean.curoffset(pageSize, curPage);
        List<DaiYeInfo> pageList=pageDao.findForPage(hql, curoffset, pageSize);
        PageBean pageBean = new PageBean();
        pageBean.setAllRowCounts(allRowCounts);
        pageBean.setCurPage(curPage);
        pageBean.setPageList(pageList);
        pageBean.setPageSize(pageSize);
        pageBean.setSumPages(sumPages);
        return pageBean;
    }

//这是service层的具体实现, 自己定义每页查询数(int pageSize=10;), 和查询条件(String hql="from DaiYeInfo";)以及将数据封装到pageBean实例中。

public String selectDaiYeByPage() {
        PageBean pageBean=pageService.queryForPage(page);
        HttpServletRequest request=ServletActionContext.getRequest();
        HttpSession session=request.getSession();
        session.setAttribute("pageBean", pageBean);
        return SUCCESS;
    }

此为action中方法,将pageBean实例传到前端页面中,完成分页。

<tr>
                <td></td>
                <td colspan="3">
                    <a href="/manager/selectDaiYeByPage?page=1">首页</a> |
                    <a href="/manager/selectDaiYeByPage?page=${sessionScope.pageBean.curPage-1 }">上一页</a> |
                    <a>共${sessionScope.pageBean.sumPages }页</a> |
                    <a href="/manager/selectDaiYeByPage?page=${sessionScope.pageBean.curPage }">第${sessionScope.pageBean.curPage }页</a> |
                    <a href="/manager/selectDaiYeByPage?page=${sessionScope.pageBean.sumPages+1 }">下一页</a> |
                    <a href="/manager/selectDaiYeByPage?page=${sessionScope.pageBean.sumPages }">尾页</a>
                </td>
                <td colspan="2"></td>
            </tr>

此为分页的前端代码。

以上就是ssh分页的过程,其实就是pageBean类里面的几个属性的赋值,其中(每页记录数)是自己根据需求定义的,(当前页数)是前端传过来的,(总记录数)是数据库查出来的,(总页数)是自己根据总记录数和每页记录数在service简单计算出来的,(初始记录点)也是简单计算出来的,根据这几个值和值相对应的出处,分别写方法(确定在那个层里面),就行了。

注:如果有不清楚的可以参考此博文:https://www.jianshu.com/p/9f439e1e3330(本文就是参考此博文的)

因为是新手,晚上加班总结的有点匆忙,有什么不对或者可以改进的地方请大神指教。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值