现在展示在大家面前的是查询分页两个核心类 :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(主索引)集合
* 注:此hql必须是只检索主键及复合主键的查询语句,具体见应用实例
* @param hql 带参数的查询语句
* @param bean 参数设置实体类
* @return Object[] 主索引集合(可以主键ID,也可以是复合ID)
*/
public Object[] getIDList(String hql, Object bean)
{
List list = HibernateUtil.query(hql,bean);
if (list==null || list.size()==0)
return null;
return list.toArray();
}
/**子类方法:根据子类的需要选择调用AbstractSearch的“带参”和“不带参”两种查询中的一种返回主键ID的数组集*/
abstract public Object[] getList();
/**子类方法:设定查询条件*/
abstract protected void condition();
}
/********************************AbstractList类************************************/
package com.nyhr.struts.frame;
import com.nyhr.struts.page.*;
import com.nyhr.struts.constant.SysConstant;
import com.nyhr.struts.hibernate.HibernateSessionFactory;
import org.hibernate.HibernateException;
import org.hibernate.Query;
import org.hibernate.Session;
import java.util.List;
import java.util.ArrayList;
/**
* <p>Title: 分页及初始化分页程序</p>
* <p>Description: 所有的初始化分页必须继承此类,如果是预查询调用,同时会初始化Page实体,否则Page实体会由FormBean提交生成</p>
* <p>Copyright: Copyright (c) 2006</p>
* <p>Company: 四方人才网</p>
* @author Yeno.hhr
* @version 1.0
*/
abstract public class AbstractList {
private Page page;
/**查询结果的主键ID集*/
private Object[] idList;
public AbstractList(){}
/**
* 预查询初始化分页构造(初次查询)
* @param hql 查询语句
* @param search 预查询类
*/
public AbstractList(AbstractSearch search){
this.idList=search.getList();
}
/**
* 查询分页构造(分页查询)
* @param page 分页状态实体
* @param idList
*/
public AbstractList(Page page, Object[] idList){
this.idList=idList;
this.page=page;
}
/**子类方法:设置分页查询的查询语句*/
abstract protected String getHql();
/**
* 返回查询结果
* @return Result
*/
public Result getResult(){
if(page==null){
if(idList==null)
this.page = PageUtil.createPage(SysConstant.PAGE_SIZE,1,0);
else
this.page = PageUtil.createPage(SysConstant.PAGE_SIZE,1,idList.length);
}
return new Result(page, getListByPage());
}
/**
* 分页查询,返回当前页的查询结果集
* @param hql
* @return list 结果集
*/
public List getListByPage(){
List list = null;
if (page.getTotalPage() < 1)
return list;
try{
String hql=getHql();
if(hql==null || hql.equals(""))
return list;
Object[] bean=getCurrentIds();
if(bean!=null)
list=HibernateUtil.query(hql,bean);
else
list=HibernateUtil.query(hql);
}catch(Exception e){
System.out.println(e.getMessage());
throw new RuntimeException(e);
}
return list;
}
/**
* 从查询结果的ID集中找出当前页的ID集
* @param arr 所有查询结果的主键ID集
* @return Object[]
*/
private Object[] getCurrentIds(){
if(idList==null) return null;
ArrayList<Object> list = new ArrayList<Object>();
int begin = page.getBeginIndex();
int ends = page.getTotalRecords();
int end = begin+page.getEveryPage();
if (end >= ends)
end = ends;
for (int l=begin;l<end;l++){
list.add(idList[l]);
}
return list.toArray();
}
/**
* 返回查询结果主键ID集的字符串组合形式
* @return String
*/
public String getIdList(){
String ids="";
if(idList == null)
return ids;
for(int x=0; x<idList.length; x++){
ids+=idList[x].toString();
if(x<idList.length-1)
ids+=",";
}
return ids;
}
}
/********************************HibernateUtil类************************************/
public class HibernateUtil {
private HibernateUtil(){}
/**
* 执行数据库查询,返回结果集List
* @param hsql HSQL查询语句
* @return list 结果集
*/
public static List query(String hql) {
List list = null;
Query query = null;
Session sess = HibernateSessionFactory.currentSession();
try{
//创建一条HQL查询语句
if (hql.toLowerCase().contains("from "))
query = sess.createQuery(hql);
else
query = sess.getNamedQuery(hql);
list = query.list();
}catch(HibernateException e) {
System.out.println("Hibernate Exception:@"+e.getMessage());
throw new RuntimeException(e);
}finally {
HibernateSessionFactory.closeSession();
}
return list;
}
public static List query(String hql, Object bean){
List list = null;
Query query = null;
Session sess = HibernateSessionFactory.currentSession();
try {
//创建一条HQL查询语句
if (hql.toLowerCase().contains("from "))
query = sess.createQuery(hql);
else
query = sess.getNamedQuery(hql);
query.setProperties(bean);
list = query.list();
}catch(HibernateException e) {
System.out.println("Hibernate Exception:@"+e.getMessage());
throw new RuntimeException(e);
} finally {
HibernateSessionFactory.closeSession();
}
return list;
}
}
/********************************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(主索引)集合
* 注:此hql必须是只检索主键及复合主键的查询语句,具体见应用实例
* @param hql 带参数的查询语句
* @param bean 参数设置实体类
* @return Object[] 主索引集合(可以主键ID,也可以是复合ID)
*/
public Object[] getIDList(String hql, Object bean)
{
List list = HibernateUtil.query(hql,bean);
if (list==null || list.size()==0)
return null;
return list.toArray();
}
/**子类方法:根据子类的需要选择调用AbstractSearch的“带参”和“不带参”两种查询中的一种返回主键ID的数组集*/
abstract public Object[] getList();
/**子类方法:设定查询条件*/
abstract protected void condition();
}
/********************************AbstractList类************************************/
package com.nyhr.struts.frame;
import com.nyhr.struts.page.*;
import com.nyhr.struts.constant.SysConstant;
import com.nyhr.struts.hibernate.HibernateSessionFactory;
import org.hibernate.HibernateException;
import org.hibernate.Query;
import org.hibernate.Session;
import java.util.List;
import java.util.ArrayList;
/**
* <p>Title: 分页及初始化分页程序</p>
* <p>Description: 所有的初始化分页必须继承此类,如果是预查询调用,同时会初始化Page实体,否则Page实体会由FormBean提交生成</p>
* <p>Copyright: Copyright (c) 2006</p>
* <p>Company: 四方人才网</p>
* @author Yeno.hhr
* @version 1.0
*/
abstract public class AbstractList {
private Page page;
/**查询结果的主键ID集*/
private Object[] idList;
public AbstractList(){}
/**
* 预查询初始化分页构造(初次查询)
* @param hql 查询语句
* @param search 预查询类
*/
public AbstractList(AbstractSearch search){
this.idList=search.getList();
}
/**
* 查询分页构造(分页查询)
* @param page 分页状态实体
* @param idList
*/
public AbstractList(Page page, Object[] idList){
this.idList=idList;
this.page=page;
}
/**子类方法:设置分页查询的查询语句*/
abstract protected String getHql();
/**
* 返回查询结果
* @return Result
*/
public Result getResult(){
if(page==null){
if(idList==null)
this.page = PageUtil.createPage(SysConstant.PAGE_SIZE,1,0);
else
this.page = PageUtil.createPage(SysConstant.PAGE_SIZE,1,idList.length);
}
return new Result(page, getListByPage());
}
/**
* 分页查询,返回当前页的查询结果集
* @param hql
* @return list 结果集
*/
public List getListByPage(){
List list = null;
if (page.getTotalPage() < 1)
return list;
try{
String hql=getHql();
if(hql==null || hql.equals(""))
return list;
Object[] bean=getCurrentIds();
if(bean!=null)
list=HibernateUtil.query(hql,bean);
else
list=HibernateUtil.query(hql);
}catch(Exception e){
System.out.println(e.getMessage());
throw new RuntimeException(e);
}
return list;
}
/**
* 从查询结果的ID集中找出当前页的ID集
* @param arr 所有查询结果的主键ID集
* @return Object[]
*/
private Object[] getCurrentIds(){
if(idList==null) return null;
ArrayList<Object> list = new ArrayList<Object>();
int begin = page.getBeginIndex();
int ends = page.getTotalRecords();
int end = begin+page.getEveryPage();
if (end >= ends)
end = ends;
for (int l=begin;l<end;l++){
list.add(idList[l]);
}
return list.toArray();
}
/**
* 返回查询结果主键ID集的字符串组合形式
* @return String
*/
public String getIdList(){
String ids="";
if(idList == null)
return ids;
for(int x=0; x<idList.length; x++){
ids+=idList[x].toString();
if(x<idList.length-1)
ids+=",";
}
return ids;
}
}
/********************************HibernateUtil类************************************/
public class HibernateUtil {
private HibernateUtil(){}
/**
* 执行数据库查询,返回结果集List
* @param hsql HSQL查询语句
* @return list 结果集
*/
public static List query(String hql) {
List list = null;
Query query = null;
Session sess = HibernateSessionFactory.currentSession();
try{
//创建一条HQL查询语句
if (hql.toLowerCase().contains("from "))
query = sess.createQuery(hql);
else
query = sess.getNamedQuery(hql);
list = query.list();
}catch(HibernateException e) {
System.out.println("Hibernate Exception:@"+e.getMessage());
throw new RuntimeException(e);
}finally {
HibernateSessionFactory.closeSession();
}
return list;
}
public static List query(String hql, Object bean){
List list = null;
Query query = null;
Session sess = HibernateSessionFactory.currentSession();
try {
//创建一条HQL查询语句
if (hql.toLowerCase().contains("from "))
query = sess.createQuery(hql);
else
query = sess.getNamedQuery(hql);
query.setProperties(bean);
list = query.list();
}catch(HibernateException e) {
System.out.println("Hibernate Exception:@"+e.getMessage());
throw new RuntimeException(e);
} finally {
HibernateSessionFactory.closeSession();
}
return list;
}
}