45fan.com - 路饭网

搜索: 您的位置主页 > 网络频道 > 阅读资讯:Hibernate+Struts分页代码介绍

Hibernate+Struts分页代码介绍

2016-09-02 23:27:43 来源:www.45fan.com 【

Hibernate+Struts分页代码介绍

关于分页显示方面的文章,网上搜索会有好几大箩,当然每个人都有自己的思路和出发点。我的基本思路也很简单,就是将搜索过程分为两个部分:“预搜索”和“分页显示”。预搜索负责查询记录主键ID集,并且在整个查询分页过程中只执行一次;分页显示负责从预搜索的主键ID集中找出当前要显示的记录,每进行一次翻页操作便执行一次,从而实现分页显示功能。由于查询的Where条件为主键ID,并且每次只查询当页显示的记录数(比如:20条),所以在重量级查询中有着一定的性能优势。
本文主要从以下三个方面(三篇文章)来进行讲解:

1. 构建生成分页变量实体、存储查询结果实体
2. 预搜索类、分页搜索类、HibernateUtil工具类部分关联代码
3. 实现预搜索、分页搜索的两个类及用Struts的Action调用分页实例
注:View视图层的JSP代码未贴出来,相信大家在得到Result后都知道如何用Struts标签显示

首先我们为查询分页构建三个基础类:Page(保存分页的当前状态值)、PageUtil(生成Page)、Result(保存查询结果),代码都有详细的文档解释,就不再另作说明了,这三个类的代码分别如下:
/**********************************Page类*********************************************/
package com.nyhr.struts.page;

/**
* 分页实体类,保存当前分页状态变量
* @author Yeno.hhr
*/
public class Page {

/** imply if the page has previous page */
private boolean hasPrePage;

/** imply if the page has next page */
private boolean hasNextPage;

/** the number of every page */
private int everyPage;

/** the total page number */
private int totalPage;

/** the total record number */
private int totalRecords;

/** the number of current page */
private int currentPage;

/** the begin index of the records by the current query */
private int beginIndex;


/** The default constructor */
public Page(){

}

/** construct the page by everyPage
* @param everyPage
* */
public Page(int everyPage){
this.everyPage = everyPage;
}

/** The whole constructor */
public Page(boolean hasPrePage, boolean hasNextPage,
int everyPage, int totalPage, int totalRecords,
int currentPage, int beginIndex) {
this.hasPrePage = hasPrePage;
this.hasNextPage = hasNextPage;
this.everyPage = everyPage;
this.totalPage = totalPage;
this.totalRecords = totalRecords;
this.currentPage = currentPage;
this.beginIndex = beginIndex;
}

/**
* @return
* Returns the beginIndex.
*/
public int getBeginIndex() {
return beginIndex;
}

/**
* @param beginIndex
* The beginIndex to set.
*/
public void setBeginIndex(int beginIndex) {
this.beginIndex = beginIndex;
}

/**
* @return
* Returns the currentPage.
*/
public int getCurrentPage() {
return currentPage;
}

/**
* @param currentPage
* The currentPage to set.
*/
public void setCurrentPage(int currentPage) {
this.currentPage = currentPage;
}

/**
* @return
* Returns the everyPage.
*/
public int getEveryPage() {
return everyPage;
}

/**
* @param everyPage
* The everyPage to set.
*/
public void setEveryPage(int everyPage) {
this.everyPage = everyPage;
}

/**
* @return
* Returns the hasNextPage.
*/
public boolean getHasNextPage() {
return hasNextPage;
}

/**
* @param hasNextPage
* The hasNextPage to set.
*/
public void setHasNextPage(boolean hasNextPage) {
this.hasNextPage = hasNextPage;
}

/**
* @return
* Returns the hasPrePage.
*/
public boolean getHasPrePage() {
return hasPrePage;
}

/**
* @param hasPrePage
* The hasPrePage to set.
*/
public void setHasPrePage(boolean hasPrePage) {
this.hasPrePage = hasPrePage;
}

/**
* @return Returns the totalPage.
*
*/
public int getTotalPage() {
return totalPage;
}

/**
* @param totalPage
* The totalPage to set.
*/
public void setTotalPage(int totalPage) {
this.totalPage = totalPage;
}

/**
* @param totalRecords
* The totalRecords to set.
*/
public void settotalRecords(int totalRecords)
{
this.totalRecords = totalRecords;
}
/**
* @return Returns the totalRecords.
*
*/
public int getTotalRecords()
{
return this.totalRecords;
}
}

/**********************************PageUtil类*********************************************/
package com.nyhr.struts.page;

/**
* 分页工具类,初始化Page对象
* @author Yeno.hhr
*/
public class PageUtil {

/**
* Use the origin page to create a new page
* @param page
* @param totalRecords
* @return
*/
public static Page createPage(Page page, int totalRecords){
return createPage(page.getEveryPage(), page.getCurrentPage(), totalRecords);
}

/**
* the basic page utils not including exception handler
* @param everyPage
* @param currentPage
* @param totalRecords
* @return page
*/
public static Page createPage(int everyPage, int currentPage, int totalRecords){
everyPage = getEveryPage(everyPage);
currentPage = getCurrentPage(currentPage);
int beginIndex = getBeginIndex(everyPage, currentPage);
int totalPage = getTotalPage(everyPage, totalRecords);
boolean hasNextPage = hasNextPage(currentPage, totalPage);
boolean hasPrePage = hasPrePage(currentPage);

return new Page(hasPrePage, hasNextPage,
everyPage, totalPage, totalRecords,
currentPage, beginIndex);
}

private static int getEveryPage(int everyPage){
return everyPage == 0 ? 10 : everyPage;
}

private static int getCurrentPage(int currentPage){
return currentPage == 0 ? 1 : currentPage;
}

private static int getBeginIndex(int everyPage, int currentPage){
return (currentPage - 1) * everyPage;
}

private static int getTotalPage(int everyPage, int totalRecords){
int totalPage = 0;

if(totalRecords % everyPage == 0)
totalPage = totalRecords / everyPage;
else
totalPage = totalRecords / everyPage + 1 ;

return totalPage;
}

private static boolean hasPrePage(int currentPage){
return currentPage == 1 ? false : true;
}

private static boolean hasNextPage(int currentPage, int totalPage){
return currentPage == totalPage || totalPage == 0 ? false : true;
}


}

/**********************************Result类*********************************************/
package com.nyhr.struts.page;

import java.util.List;
/**
* <p>Title: 检索结果集实体类</p>
* <p>Description: 保存分页参数及数据库查询的结果,用于页面显示</p>
* <p>Copyright: Copyright (c) 2006</p>
* <p>Company: 四方人才网</p>
* @author Yeno.hhr
* @version 1.0
*/
public class Result {
/**分页状态变量实体*/
private Page page;
/**数据库检索到的当前页结果集*/
private List content;

/**
* The default constructor
*/
public Result() {
super();
}

/**
* The constructor using fields
*
* @param page
* @param content
*/
public Result(Page page, List content) {

this.page = page;
this.content = content;
}

/**
* @return Returns the content.
*/
public List getContent() {
return content;
}

/**
* @return Returns the page.
*/
public Page getPage() {
return page;
}

/**
* The content to set.
* @param content
*/
public void setContent(List content) {
this.content = content;
}

/**
* The page to set.
* @param page
*/
public void setPage(Page page) {
this.page = page;
}
}
现在展示在大家面前的是查询分页两个核心类 :AbstractSearch(预查询初始化程序)、AbstractList(分页及初始化分页程序),代码如下:
/********************************AbstractSearch类************************************/
package com.nyhr.struts.frame;

import java.util.List;

import com.nyhr.struts.beans.HibernateUtil;
/**
* <p>Title: 预查询初始化程序</p>
* <p>Description: 所有的初始化查询必须继承此类,本类只负责预查询ID集和Page对象的初始化,不实现显示逻辑</p>
* <p>Copyright: Copyright (c) 2006</p>
* <p>Company: 四方人才网</p>
* @author Yeno.hhr
* @version 1.0
*/
public abstract class AbstractSearch {

public AbstractSearch()
{
super();
}
/**
* 根据HQL查询出记录的主键ID(主索引)集合
* 注:此hql必须是只检索主键及复合主键的查询语句,具体见应用实例
* @param hql 不带查询的查询语句
* @return idArray 主索引集合(可以主键ID,也可以是复合ID)
*/
public Object[] getIDList(String hql)
{
List list = HibernateUtil.query(hql);
if (list==null || list.size()==0)
return null;
return list.toArray();
}
/**
* 根据HQL查询出记录的主键ID(主索引)集合


本文地址:http://www.45fan.com/a/question/71498.html
Tags: 代码 关于 Hibernate+Struts
编辑:路饭网
关于我们 | 联系我们 | 友情链接 | 网站地图 | Sitemap | App | 返回顶部