使用hibernate和struts2实现分页功能的示例

网友投稿 198 2023-06-20


使用hibernate和struts2实现分页功能的示例

想着每天能学个新东西,今天准备了这个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 PersonDAhttp://OImpl();

/**

* 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"%>

  

条记录

首页   上一页

首页

   

">上一页

">下一页

   

">尾页

下一页   尾页

跳转至

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

页面效果如下:

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:12306 刷票脚本及稳固刷票脚本(防挂)
下一篇:Java 基础 byte[]与各种数据类型互相转换的简单示例
相关文章

 发表评论

暂时没有评论,来抢沙发吧~