博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
使用hibernate和struts2实现分页功能
阅读量:7168 次
发布时间:2019-06-29

本文共 7083 字,大约阅读时间需要 23 分钟。

想着每天能学个新东西,今天准备了这个hibernate+struts2实现页面的分页功能,在这里,首先要感谢

位博友发表的博文,通过对他代码的阅读,从而自己实现了网页分页功能,以下是源代码,如大家有需要,可以回复我,我会放出源代码供大家下载!

1.DAO层接口的设计,定义一个PersonDAO接口,里面声明了两个方法:

public interface PersonDAO{    public List
queryByPage(String hql, int offset, int pageSize); public int getAllRowCount(String hql);}

2.DAO层接口的实现类PersonDAOImpl类,将其两个方法实现出来:

public class PersonDAOImpl implements PersonDAO{    /**     * 通过hql语句得到数据库中记录总数     */    @Override    public int getAllRowCount(String hql)    {        Session session = HibernateUtil.openSession();        Transaction tx = null;        int allRows = 0;        try        {            tx = session.beginTransaction();                        Query query = session.createQuery(hql);                        allRows = query.list().size();                        tx.commit();                    }        catch (Exception e)        {            if(tx != null)            {                tx.rollback();            }                        e.printStackTrace();        }        finally        {            HibernateUtil.closeSession(session);        }                return allRows;    }    /**     * 使用hibernate提供的分页功能,得到分页显示的数据     */    @SuppressWarnings("unchecked")    @Override    public List
queryByPage(String hql, int offset, int pageSize) { Session session = HibernateUtil.openSession(); Transaction tx = null; List
list = null; try { tx = session.beginTransaction(); Query query = session.createQuery(hql).setFirstResult(offset).setMaxResults(pageSize); list = query.list(); tx.commit(); } catch (Exception e) { if(tx != null) { tx.rollback(); } e.printStackTrace(); } finally { HibernateUtil.closeSession(session); } return list; }}

3.定义了一个PageBean(每一页所需要的内容都存放在这个PageBean里面),里面用来存放网页每一页显示的内容:

public class PageBean{    private List
list; //通过hql从数据库分页查询出来的list集合 private int allRows; //总记录数 private int totalPage; //总页数 private int currentPage; //当前页 public List
getList() { return list; } public void setList(List
list) { this.list = list; } public int getAllRows() { return allRows; } public void setAllRows(int allRows) { this.allRows = allRows; } public int getTotalPage() { return totalPage; } public void setTotalPage(int totalPage) { this.totalPage = totalPage; } public int getCurrentPage() { return currentPage; } public void setCurrentPage(int currentPage) { this.currentPage = currentPage; } /** * 得到总页数 * @param pageSize 每页记录数 * @param allRows 总记录数 * @return 总页数 */ public int getTotalPages(int pageSize, int allRows) { int totalPage = (allRows % pageSize == 0)? (allRows / pageSize): (allRows / pageSize) + 1; return totalPage; } /** * 得到当前开始记录号 * @param pageSize 每页记录数 * @param currentPage 当前页 * @return */ public int getCurrentPageOffset(int pageSize, int currentPage) { int offset = pageSize * (currentPage - 1); return offset; } /** * 得到当前页, 如果为0 则开始第一页,否则为当前页 * @param page * @return */ public int getCurPage(int page) { int currentPage = (page == 0)? 1: page; return currentPage; } }

4.Service层接口设计,定义一个PersonService接口,里面声明了一个方法,返回一个PageBean:

public interface PersonService{    public PageBean getPageBean(int pageSize, int page);}

5.Service层接口实现类PersonServiceImpl类,实现唯一的方法:

public class PersonServiceImpl implements PersonService{    private PersonDAO personDAO = new PersonDAOImpl();        /**     * pageSize为每页显示的记录数     * page为当前显示的网页     */    @Override    public PageBean getPageBean(int pageSize, int page)    {        PageBean pageBean = new PageBean();                String hql = "from Person";                int allRows = personDAO.getAllRowCount(hql);                int totalPage = pageBean.getTotalPages(pageSize, allRows);                int currentPage = pageBean.getCurPage(page);                int offset = pageBean.getCurrentPageOffset(pageSize, currentPage);                List
list = personDAO.queryByPage(hql, offset, pageSize); pageBean.setList(list); pageBean.setAllRows(allRows); pageBean.setCurrentPage(currentPage); pageBean.setTotalPage(totalPage); return pageBean; }}

6.Action层设计,定义一个PersonAction:

public class PersonAction extends ActionSupport{    private PersonService personService = new PersonServiceImpl();        private int page;        public int getPage()    {        return page;    }    public void setPage(int page)    {        this.page = page;    }    @Override    public String execute() throws Exception    {        //表示每页显示5条记录,page表示当前网页        PageBean pageBean = personService.getPageBean(5, page);                HttpServletRequest request = ServletActionContext.getRequest();                request.setAttribute("pageBean", pageBean);                return SUCCESS;    }}

7.辅助类设计,HibernateUtil:

public class HibernateUtil{    private static SessionFactory sessionFactory;        static    {        sessionFactory = new Configuration().configure().buildSessionFactory();    }        public static Session openSession()    {        Session session = sessionFactory.openSession();                return session;    }        public static void closeSession(Session session)    {        if(session != null)        {            session.close();        }    }    }

8.最后也就是分页页面显示pagePerson.jsp:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%><%@ taglib prefix="s" uri="/struts-tags"%>              My JSP 'pagePerson.jsp' starting page        

分页查询


序号 姓名 年龄
  
条记录
首页   上一页
首页    
">上一页
">下一页    
">尾页
下一页   尾页
跳转至

至此,hibernate+struts2实现网页分页功能代码部分就完毕了,像hibernate与struts的配置文件就不列出来了,那些都不是重点!

页面效果如下:

转载地址:http://vymwm.baihongyu.com/

你可能感兴趣的文章
老程序员的经验和价值在哪里
查看>>
java程序运行时内存分配详解
查看>>
Java 设计摸索--访问者模式
查看>>
生活网址
查看>>
Xen
查看>>
解析Linux网络分析的三大利器(ZT)
查看>>
(chrome)CreQQ:chrome浏览器QQ插件|在老板面前轻松聊Q
查看>>
MDT 2012 批量部署(三)——安装
查看>>
File native method
查看>>
JAVA中的enum
查看>>
物联网平台构架系列 (一):Amazon, Microsoft, IBM IoT 解决方案导论 之 概览
查看>>
转载和积累系列 - Page cache和Buffer cache
查看>>
Java中如何利用Selenium获取元素分析网页内容
查看>>
ssh不能远程登录问题解决 & hosts.allow/howts.deny书写规则
查看>>
【Spring】HttpMessageConverter的作用及替换
查看>>
kvm sr-iov 热插拔 简介
查看>>
hibernate inverse作用
查看>>
cv::Mat 结构
查看>>
Centos6.9 安装docker与docker-compose
查看>>
Aug 09 使用AVAudioPlayer轻松搞定音频播放
查看>>