Struts2 Hibernate Spring分页及分页查询

Struts2 Hibernate Spring分页及分页查询

    最近学习写了一个分页以及查询的功能。主要就是用了Hibernate的一些功能。直接说吧。。

    首页写一个PageBean类

==================================================================================================

public class PageBean{

  private List list;        //要返回的某一页的记录列表
    
     private int allRow;         //总记录数
     private int totalPage;        //总页数
     private int currentPage;    //当前页
     private int pageSize;        //每页记录数
     private String strpage;     //链接增加的字符参数
    

  private boolean isFirstPage;    //是否为第一页
     private boolean isLastPage;        //是否为最后一页
     private boolean hasPreviousPage;    //是否有前一页
     private boolean hasNextPage;        //是否有下一页
    
    
     public List getList() {
         return list;
     }
     public void setList(List list) {
         this.list = list;
     }
     public int getAllRow() {
         return allRow;
     }
     public void setAllRow(int allRow) {
         this.allRow = allRow;
     }
     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 getPageSize() {
         return pageSize;
     }
     public void setPageSize(int pageSize) {
         this.pageSize = pageSize;
     }
    
  public String getStrpage() {
   return strpage;
  }
  public void setStrpage(String strpage) {
   this.strpage = strpage;
  }
    
    
     public void init(){
         this.isFirstPage = isFirstPage();
         this.isLastPage = isLastPage();
         this.hasPreviousPage = isHasPreviousPage();
         this.hasNextPage = isHasNextPage();
     }
    
    
    
     public boolean isFirstPage() {
         return currentPage == 1;    // 如是当前页是第1页
     }
     public boolean isLastPage() {
         return currentPage == totalPage;    //如果当前页是最后一页
     }
     public boolean isHasPreviousPage() {
         return currentPage != 1;        //只要当前页不是第1页
     }
     public boolean isHasNextPage() {
         return currentPage != totalPage;    //只要当前页不是最后1页
     }
    
    
    
     public static int countTotalPage(final int pageSize,final int allRow){
         int totalPage = allRow % pageSize == 0 ? allRow/pageSize : allRow/pageSize+1;
         return totalPage;
     }
    
    
     public static int countOffset(final int pageSize,final int currentPage){
         final int offset = pageSize*(currentPage-1);
         return offset;
     }
    
    
     public static int countCurrentPage(int page){
         final int curPage = (page==0?1:page);
         return curPage;
     }
==================================================================================================

    在写实现、操作数据库的Pagination类。

==================================================================================================

public class Pagination extends HibernateDaoSupport {
 
  
    @SuppressWarnings("unchecked")
 public List queryForPage(final String hql,final int offset,final int length){
        List list = getHibernateTemplate().executeFind(new HibernateCallback(){
            public Object doInHibernate(Session session) throws HibernateException,SQLException{
                Query query = session.createQuery(hql);
                query.setFirstResult(offset);
                query.setMaxResults(length);
                List list = query.list();
                return list;
            }
        });
        return list;
    }
   
   
    public int getAllRowCount(String hql){
        return getHibernateTemplate().find(hql).size();
    }

   
    @SuppressWarnings("unchecked")
 public PageBean findAll(final String hql,int pageSize,int page)
 {
        int allRow = getAllRowCount(hql);    //总记录数
        int totalPage = PageBean.countTotalPage(pageSize, allRow);    //总页数
        final int offset = PageBean.countOffset(pageSize, page);    //当前页开始记录
        final int length = pageSize;    //每页记录数
        final int currentPage = PageBean.countCurrentPage(page);
        List<User> list = queryForPage(hql,offset, length);        //"一页"的记录
       
        //把分页信息保存到Bean中
        PageBean pageBean = new PageBean();
        pageBean.setPageSize(pageSize);   
        pageBean.setCurrentPage(currentPage);
        pageBean.setAllRow(allRow);
        pageBean.setTotalPage(totalPage);
        pageBean.setList(list);
        pageBean.init();
        return pageBean;

 }==================================================================================================

    由于这个类需要操作数据库。需要在Spring的配置文件applicationContext.xml中添加

==================================================================================================

<bean id="pagination" class="com.test.common.page.Pagination"
  scope="singleton">
  <property name="sessionFactory">
   <ref bean="sessionFactory" />
  </property>
 </bean>

==================================================================================================

    在具体实现某种需求的时候调用Pagination类中的方法。下面拿我写的一个用户类做例子

==================================================================================================

//查询所用用户 分页
public PageBean findAll(int pageSize,int page)
 {
  //return this.userDao.findAllUsers();
  
  String hql = "from User";        //查询语句
  
        return this.pagination.findAll(hql, pageSize, page);

}

 

//用户搜索 分页

 public PageBean search(String field, String search, int pageSize, int page) {

  String hql = "from User where "+field+" like '%"+search+"%'";        //查询语句
  
        return this.pagination.findAll(hql, pageSize, page);
 }

==================================================================================================

    后台基本就这些了,前台分页部分我是这样写的。

==================================================================================================

<span class="pager_bar">
         共<s:property value="pageBean.allRow"/> 条记录
        共<s:property value="pageBean.totalPage"/> 页
        当前第<s:property value="pageBean.currentPage"/>页
       
        <s:if test="%{pageBean.currentPage == 1}">
            第一页 上一页
        </s:if>
        <s:else>
            <a href="listUser.action?page=1&field=${field}&search=${search}">第一页</a>
            <a href="listUser.action?page=${pageBean.currentPage-1}&field=${field}&search=${search}">上一页</a>
        </s:else>
        <s:if test="%{pageBean.currentPage != pageBean.totalPage}">
            <a href="listUser.action?page=${pageBean.currentPage+1}&field=${field}&search=${search}">下一页</a>
            <a href="listUser.action?page=${pageBean.totalPage}&field=${field}&search=${search}">最后一页</a>
        </s:if>
        <s:else>
            下一页 最后一页
        </s:else></span>

==================================================================================================

   需要指出的是由于加了查询所以在翻页的时候需要传field和search变量的值。

 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值