基于ssh的学生管理系统(三) 分页设计

本文详细介绍了如何在SSH框架下实现学生管理系统的分页功能。通过创建PageBean模型,设置Controller、Service和Dao层的方法,利用DetachedCriteria进行离线查询,实现了动态获取分页数据并返回到页面展示。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、分页功能的实现

设计一个分页的模型

public class PageBean<T> {
    private Integer currPage; //当前页数
    private Integer pageSize; //每页的大小
    private Integer totalCount; //总数
    private Integer totalPage; //总页数
    private List<T> list; //每页查到的数据的集合

    //由于篇幅关系,省略了set、get方法

}

Controller层:

    //分页查询用户
    public String findAll(){
        //接收分页参数
        //使用DetechedCriteria对象查询
        DetachedCriteria detachedcriteria=DetachedCriteria.forClass(Student.class);
        //返回一个分页模型
        PageBean<Student> pageBean=studentService.findByPage(detachedcriteria,currpage,pageSize);
        ActionContext.getContext().getValueStack().push(pageBean);
        System.out.println(pageBean.getList().size());
        return "findAll";
    }

因为是使用hibernate进行dao,所以在这里设定了一个 DetachedCriteria 离线查询条件。然后调用service层的findByPage方法,并将detachedcriteria、当前的页码(从页面上获取)、每页的条数(从页面获取)传递到service进行处理,

在执行完service的findByPage方法后返回 PageBean实例,然后将实例推入到值栈中,以便在页面上取出数据。

 

Service层:

//分页查询
    @Override
    public PageBean<Student> findByPage(DetachedCriteria detachedcriteria, Integer currpage,Integer pagesize) {
        // TODO Auto-generated method stub
        PageBean<Student> pageBean=new PageBean<Student>();
        //每页显示记录数
        pageBean.setPageSize(pagesize);
        //显示当前页数
        pageBean.setCurrPage(currpage);
        //总记录数
        //调用DAO
        Integer totalCount=studentDao.findCount(detachedcriteria);
        pageBean.setTotalCount(totalCount);
        //总页数
        Integer totalPage=(totalCount/pagesize)+1;
        pageBean.setTotalPage(totalPage);
        //查询当前页的数据
        Integer begin=(currpage - 1) * pagesize;
        List<Student> list=studentDao.findByPage(detachedcriteria,begin,pagesize);
        pageBean.setList(list);
        //返回pagebean模型
        return pageBean;
    }

在service层需要 设定pagebean的实例对象,然后将对象的值填充完整,其中 pagesize、currpage是传入时自带的,totalCount、list 需要调用Dao 来获取。数据填充完整后,将对象返回给上层的Controller层即可。

 

Dao层:

//统计符合条件的学生个数的方法
    @Override
    public Integer findCount(DetachedCriteria detachedcriteria) {
        // TODO Auto-generated method stub
        detachedcriteria.setProjection(Projections.rowCount());
        List<Long> list=(List<Long>) hibernateTemplate.findByCriteria(detachedcriteria);
        if(list.size()>0){
            return list.get(0).intValue();
        }
        return null;
    }

    //查询符合条件的单页的学生信息
    @Override
    public List<Student> findByPage(DetachedCriteria detachedcriteria, Integer begin, Integer pagesize) {
        // TODO Auto-generated method stub
        detachedcriteria.setProjection(null);
        return (List<Student>) hibernateTemplate.findByCriteria(detachedcriteria,begin,pagesize);
    }

Dao层需要实现两个方法,分别返回符合条件的学生的总数 和 单页的学生信息

注意:在第一个方法执行时,detachedcriteria 设置了setProjection(Prodections.rowCount),在第二个方法执行时,条件仍然是上一个方法中的detachedcriteria,所以需要setProjection(null)来重置。

以上是Controller、Service、Dao层上的编写,接下来要做的只是将pageBean 中的数据显示在页面中即可。

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值