想着每天能学个新东西,今天准备了这个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
{
@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;
}
@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;
}
public int getTotalPages(int pageSize, int allRows)
{
int totalPage = (allRows % pageSize == 0)? (allRows / pageSize): (allRows / pageSize) + 1;
return totalPage;
}
public int getCurrentPageOffset(int pageSize, int currentPage)
{
int offset = pageSize * (currentPage - 1);
return offset;
}
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();
@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的配置文件就不列出来了,那些都不是重点!
页面效果如下:
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持考高分网。



