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

你可能感兴趣的文章
python操作数据库之读取数据库数据方法
查看>>
HTTPS工作原理
查看>>
DHCP服务器与NIS服务器
查看>>
Android官方开发文档Training系列课程中文版:分享简单数据之发送简单数据给其它APP...
查看>>
spring boot 框架 启动更新项目,以及生成 "实体_"文件
查看>>
Asp编程中的一些重要函数(2)
查看>>
免运费:卓越亚马逊的最后一搏?
查看>>
Android官方开发文档Training系列课程中文版:手势处理之ViewGroup的事件管理
查看>>
linux-Kickstart
查看>>
1月2日课程笔记 lvm介绍与实际操作
查看>>
windows Server 2012安装DNS步骤
查看>>
图像压缩的王者:Image Optimizer V5.1 汉化修正绿色版
查看>>
Nginx + CGI/FastCGI + C/Cpp
查看>>
mysql创建用户
查看>>
暑假期间学习不错的网网页
查看>>
EXPORT_SYMBOL的使用并以使用do_adjtimex调节内核tick_length(滴答长度)为例的说明...
查看>>
设计模式之——设计原则
查看>>
微软发布了ASP.NET MVC框架的第4个预览版本
查看>>
问几个 User.GetUser()的问题。各位高手来帮忙回答一下
查看>>
如何使用Oracle FND_LOAD工具在不同Instance间同步数据(Example)
查看>>