博客
关于我
强烈建议你试试无所不能的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/

你可能感兴趣的文章
华为机试题——整数减法
查看>>
面试经典-分金条
查看>>
session的失效时间
查看>>
WCF 4.0 进阶系列 – 第十五章 构建REST服务(第二部分)
查看>>
MySQL5.7: datetime
查看>>
Virtualenv教程
查看>>
2011年8月11日星期四
查看>>
艾伟也谈项目管理,项目管理实战之团队管理
查看>>
IE9是最佳浏览器?
查看>>
快速把web项目部署到weblogic上
查看>>
objcopy
查看>>
RGB_YUV_YCbCr
查看>>
虚拟内存机制
查看>>
一个CSV文件解析类
查看>>
javascript调用C#后台程序执行查询
查看>>
使用MonoTouch进行iOS开发
查看>>
漂亮的蓝色风格网页设计作品欣赏(系列二)
查看>>
Bind和Eval的区别详解
查看>>
血拼2011中国移动开发者大会门票超低价团购!(已结束)
查看>>
Ural_1348. Goat in the Garden 2(计算几何)
查看>>