栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

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

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

使用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
{
  
  @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的配置文件就不列出来了,那些都不是重点!

页面效果如下:

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

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/148184.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号