Hibernate中的分页显示查询结果

来源:互联网 发布:中铁ca根证书 知乎 编辑:程序博客网 时间:2024/06/08 18:53

Hibernate的Query和Criteria接口都提供了用于分页显示查询结果的方法。
在JavaBean中添加一个实体,实体中添加一个用于初始化分页信息的方法getInitPage(),该方法包括3个参数,分别是用于保存查询结果的List对象list、用于指定茶选关键字的String类型变量username和用于指定每页显示的记录数的int型变量pagesize。该方法的返回值为保存要显示记录的List对象。
public List getInitPage (List list ,String username, int pagesize){
this.pagesize = pagesize;
this.username = username;
Session session = Mysession.opensession();
try{
String hql = “”;
if (username.equals(“”)){
hql = “FROM TbOrder”}
else{
hql = “FROM TbOrder WHERE username = ‘”+username+”’”;}
recordcount = session.createQuery(hql).list().size();//记录总数
list = session .createQuery(hql).setFirstResult(0).setMaxResults(pagesize).list();
//获取最大记录数
this.maxPage = (recordCount % pagesize == 0)? (recordCount / pagesize) : (recordCount / pagesize +1);}
catch (Exception e){
e.printStack Trace ();
System.out.println(” 查询时出现的错误信息: “+e.getMessage() );}
finally{
MySession.closeSession(session);//关闭Session
}
return list;}

在JavaBean实体中添加一个用于获取指定页数据的方法getAppointPage(),该方法只包括一个用于指定当前页数的int型变量Page。该方法的返回值为保存要显示记录的list对象。

public List getAppointPage(int Page){
this.pagesize = pagesize;
this.username = username;
Session session = Mysession.opensession();
try{
String hql = “”;
if (username.equals(“”)){
hql = “FROM TbOrder”}
else{
hql = “FROM TbOrder WHERE username = ‘”+username+”’”;}
recordcount = session.createQuery(hql).list().size();//记录总数
list = session .createQuery(hql).setFirstResult((Page - 1) * pagesize).setMaxResults(pagesize).list();
}
catch (Exception e){
e.printStack Trace ();
System.out.println(” 查询时出现的错误信息: “+e.getMessage() );}
finally{
MySession.closeSession(session);//关闭Session
}
return list;}

在JavaBean实体中添加一个用于获取总记录数的方法getRecordSize(),该方法无参数,返回值为总记录数。
public int getRecordSize () {
return recordCount;}

在JavaBean中添加一个用于获取当前页数的方法getPage(),该方法只有一个用于指定从页面中获取的页数的参数,返回值为处理后的页数。

在JavaBean实体中添加一个用于输出记录导航的方法printlnCtrl(),该方法只有一个用于指定当前页数的参数,返回值为输出记录导航的字符串。

public String printCtrl (int Page ) {
String strHtml = “< table width border cellspacing cellpadding >
当前页数:[” +page + ” / ” +maxPage+ “]  ”;
try {
if (page>1){
strHtml = strHtml + “< a href = ‘?Page = 1’>第一页
strHtml = strHtml + “上一页“;}

if (Page < maxPage){
strHtml = strHtml + “下一页
最后一页 ;}
strHtml = strHtml +” ”;}
catch(Exception e){
e.printStackTrace();}
return strHtml;}

然后在要现实查询结果的页面中应用动作调用进行分页显示的JavaBean实体,并将scope属性设置为”session”

再获取传递的当前页数,并根据该确定需要调用的方法获取要显示的数据。
<%
String str = (String) request.getParameter(“Page”);
int Page = 1;
List list = null;
if (str == null ){
if (userName == null || userName.equals(“”)){
userName = “”;}
int pagesize = 5 ; //指定每页现实的记录数
list = pagination.getInitPage(list,userName,pagesize); //初始化分页信息
}else{
Page = pagination.getPage(str);
list = pagination.getAppointPage(page); //获取指定页的数据
} %>

最后通过FOR循环语句输出当前页要现实的记录,并调用实体中的printCtrl()方法现实分页的导航栏
<%
for (int i = 0; i

0 0
原创粉丝点击