SSH分页(Hibernate实现简单分页查询)

直接正题

一、INewsDao.java(DAO接口):

 1  package  cn.dy.dao;
 2 
 3  import  java.util.List;
 4  import  cn.dy.bean.News;
 5 
 6  public   interface  INewsDao {
 7 
 8       // 其他代码省略
 9      
10      
11       // 分页查询
12       public  List < News >  queryForPage(String hql, int  offset, int  length);
13      
14       // 总记录条数
15       public   int  getCount(String hql);
16  }
17 

二、dao实现类,因为第13行中q.list().get(0)的返回值为long,所以转换一下。

 1  @SuppressWarnings( " unchecked " )
 2      @Override
 3       public  List < News >  queryForPage(String hql, int  offset,  int  length) {
 4          Query q  =  factory.getCurrentSession().createQuery(hql);
 5          q.setFirstResult(offset);
 6          q.setMaxResults(length);
 7           return  q.list();
 8      }
 9 
10      @Override
11       public   int  getCount(String hql) {
12          Query q  =  factory.getCurrentSession().createQuery(hql);
13           return  Integer.parseInt(q.list().get( 0 ).toString());
14      }

三、INewsService.java业务接口,添加方法

public PageBean queryForPage(int pageSize, int currentPage);

四、业务实现类代码,注意修改参数

 1  @Override
 2       public  PageBean queryForPage( int  pageSize,  int  page) {
 3          String hql  =   " select count(*) from News " ;
 4           int  count  =  newsDao.getCount(hql);  //  总记录数
 5           int  totalPage  =  PageBean.countTotalPage(pageSize, count);  //  总页数
 6           int  offset  =  PageBean.countOffset(pageSize, page);  //  当前页开始记录
 7           int  length  =  pageSize;  //  每页记录数
 8           int  currentPage  =  PageBean.countCurrentPage(page);
 9          List < News >  list  =  newsDao.queryForPage( " from News " , offset, length);  //  该分页的记录
10           //  把分页信息保存到Bean中
11          PageBean pageBean  =   new  PageBean();
12          pageBean.setPageSize(pageSize);
13          pageBean.setCurrentPage(currentPage);
14          pageBean.setAllRow(count);
15          pageBean.setTotalPage(totalPage);
16          pageBean.setList(list);
17          pageBean.init();
18           return  pageBean;
19      }

五、action代码:

    private int page;
    private PageBean pageBean;
    
    以及上面两个的get()、set()方法。
   
    public String getPageList() {
        this.pageBean = newsService.queryForPage(6, page);
        return "newsList";
    }

    这个6,是每页6个数据,可以通过页面动态传值。

六、页面代码

1、显示代码:
 1                  < s:iterator  value ="pageBean.list" >
 2                       < tr >
 3                           < td  class ="tocenter" >
 4                               < s:property  value ="newsId"   />
 5                           </ td >
 6                           < td  colspan ="5" >
 7                               < s:property  value ="newsContent"   />
 8                           </ td >
 9                           < td  class ="tocenter" >
10                               < s:property  value ="beginTime"   />
11                           </ td >
12                       </ tr >
13                   </ s:iterator >

2、分页:

 1                  < tr >
 2                       < td  width ="13%"  class ="tocenter" >
 3                          共
 4                           < s:property  value ="pageBean.totalPage"   />
 5                          页
 6                       </ td >
 7                       < td  width ="17%"  class ="tocenter" >
 8                          共
 9                           < s:property  value ="pageBean.allRow"   />
10                          条记录
11                       </ td >
12                       < td  width ="15%"  class ="tocenter" >
13                          当前第
14                           < s:property  value ="pageBean.currentPage"   />
15                          页
16                       </ td >
17                       < td  colspan ="4"  width ="55%"  class ="tocenter" >
18                           < s:if  test ="%{pageBean.currentPage == 1}" > 第一页 &nbsp;&nbsp;&nbsp;&nbsp; 上一页 &nbsp;&nbsp;&nbsp;&nbsp; </ s:if >
19                           < s:else >
20                               < href ="/DyEnigma/news/op_getPageList.do?page=1" > 第一页 &nbsp;&nbsp;&nbsp;&nbsp; </ a >
21                               < href ="/DyEnigma/news/op_getPageList.do?page=<s:property value=" %{pageBean.currentPage-1}" /> ">上一页 &nbsp;&nbsp;&nbsp;&nbsp; </ a >
22                           </ s:else >
23                           < s:if  test ="%{pageBean.currentPage != pageBean.totalPage}" >
24                               < href ="/DyEnigma/news/op_getPageList.do?page=<s:property value=" %{pageBean.currentPage+1}" /> ">下一页 &nbsp;&nbsp;&nbsp;&nbsp; </ a >
25                               < href ="/DyEnigma/news/op_getPageList.do?page=<s:property value=" pageBean.totalPage" /> ">最后一页 </ a >
26                           </ s:if >
27                           < s:else > 下一页 &nbsp;&nbsp;&nbsp;&nbsp;  最后一页 </ s:else >
28                       </ td >
29                   </ tr >

七、PageBean文件

  1 package  cn.dy.own;
  2
  3 import  java.util.List;
  4
  5 @SuppressWarnings( " unchecked " )
  6 public   class  PageBean  {
  7
  8    private List list;// 要返回的某一页的记录列表
  9    
 10    private int allRow; // 总记录数
 11    private int totalPage; // 总页数
 12    private int currentPage; // 当前页
 13    private int pageSize;// 每页记录数
 14    
 15    @SuppressWarnings("unused")
 16    private boolean isFirstPage; // 是否为第一页
 17    @SuppressWarnings("unused")
 18    private boolean isLastPage;// 是否为最后一页
 19    @SuppressWarnings("unused")
 20    private boolean hasPreviousPage; // 是否有前一页
 21    @SuppressWarnings("unused")
 22    private boolean hasNextPage;// 是否有下一页
 23
 24    public List getList() {
 25        return list;
 26    }

 27
 28    public void setList(List list) {
 29        this.list = list;
 30    }

 31
 32    public int getAllRow() {
 33        return allRow;
 34    }

 35
 36    public void setAllRow(int allRow) {
 37        this.allRow = allRow;
 38    }

 39
 40    public int getTotalPage() {
 41        return totalPage;
 42    }

 43
 44    public void setTotalPage(int totalPage) {
 45        this.totalPage = totalPage;
 46    }

 47
 48    public int getCurrentPage() {
 49        return currentPage;
 50    }

 51
 52    public void setCurrentPage(int currentPage) {
 53        this.currentPage = currentPage;
 54    }

 55
 56    public int getPageSize() {
 57        return pageSize;
 58    }

 59
 60    public void setPageSize(int pageSize) {
 61        this.pageSize = pageSize;
 62    }

 63
 64    /**
 65     * 初始化分页信息
 66     */

 67    public void init() {
 68        this.isFirstPage = isFirstPage();
 69        this.isLastPage = isLastPage();
 70        this.hasPreviousPage = isHasPreviousPage();
 71        this.hasNextPage = isHasNextPage();
 72    }

 73
 74    /**
 75     * 以下判断页的信息,只需getter方法(is方法)即可
 76     * 
 77     * @return
 78     */

 79    public boolean isFirstPage() {
 80        return currentPage == 1// 如是当前页是第1页
 81    }

 82
 83    public boolean isLastPage() {
 84        return currentPage == totalPage; // 如果当前页是最后一页
 85    }

 86
 87    public boolean isHasPreviousPage() {
 88        return currentPage != 1;// 只要当前页不是第1页
 89    }

 90
 91    public boolean isHasNextPage() {
 92        return currentPage != totalPage; // 只要当前页不是最后1页
 93    }

 94
 95    /**
 96     * 计算总页数,静态方法,供外部直接通过类名调用
 97     * 
 98     * @param pageSize每页记录数
 99     * @param allRow总记录数
100     * @return 总页数
101     */

102    public static int countTotalPage(final int pageSize, final int allRow) {
103        int totalPage = allRow % pageSize == 0 ? allRow / pageSize : allRow / pageSize + 1;
104        return totalPage;
105    }

106
107    /**
108     * 计算当前页开始记录
109     * 
110     * @param pageSize每页记录数
111     * @param currentPage当前第几页
112     * @return 当前页开始记录号
113     */

114    public static int countOffset(final int pageSize, final int currentPage) {
115        final int offset = pageSize * (currentPage - 1);
116        return offset;
117    }

118
119    /**
120     * 计算当前页,若为0或者请求的URL中没有"?page=",则用1代替
121     * 
122     * @paramPage 传入的参数(可能为空,即0,则返回1)
123     * @return 当前页
124     */

125    public static int countCurrentPage(int page) {
126        final int curPage = (page == 0 ? 1 : page);
127        return curPage;
128    }

129}


OK,完工。 

转载请注明来源 http://www.blogjava.net/DyEnigma/

你可能感兴趣的:(SSH分页(Hibernate实现简单分页查询))