Hibernate+struts2+spring 实现分页实例

首先定义一个包含分页相关信息的分页类PageResultSet类: package cn.tutorinfo.pagination;import java.util.List;/** *该类描述了一个分页数据集 list中是查询的数据集合 ,pageInfo则描述了附加的页相关的信息 */public class PageResultSetT {private ListT list; /

首先定义一个包含分页相关信息的分页类PageResultSet类:

package cn.tutorinfo.pagination;
import java.util.List;
/**
 *该类描述了一个分页数据集 list中是查询的数据集合 ,pageInfo则描述了附加的页相关的信息
*/
public class PageResultSet<T> {
         private List<T> list;  //当前页的数据信息
         private PageInfo pageInfo; //当前页的信息
         public List<T> getList() {
                  return list;
         }
         public void setList(List<T> list) {
                 this.list = list;
         }
         public PageInfo getPageInfo() {
                 return pageInfo;
         }
         public void setPageInfo(PageInfo pageInfo) {
                 this.pageInfo = pageInfo;
         }
}

 其中关于页的信息类PageInfo 定义如下:

package cn.tutorinfo.pagination;
/**
 * 该类描述了分页记录集中的关于页的信息
 */
public class PageInfo {
         private int totalRow;     //总共记录数
         private int totalPage;    //总共页数
         private int currentPage = 1; //当前页,默认为1
         private int pageSize = 20;   //页的大小
         private boolean hasPrevious;
         private boolean hasNext;
         private boolean bof;
         private boolean eof;
    /*
          * 构造方法
            @param totalRow 总记录数
            @param pageSize 页的大小
            @param page 页码
     */
         public PageInfo(int totalRow, int pageSize, int page) {
                 this.totalRow = totalRow;
                 this.pageSize = pageSize;
                 // 根据页大小和总记录数计算出总页数
                 this.totalPage = countTotalPage(this.pageSize, this.totalRow);
 
                 // 修正当前页
                 setCurrentPage(page);
                 init();
         }
         public int getTotalPage() {
                 return totalPage;
         }
         public int getCurrentPage() {
 
                 return this.currentPage;
         }
         // 修正计算当前页
         public void setCurrentPage(int currentPage) {
        if(currentPage>this.totalPage){
         this.currentPage=this.totalPage;            
        }else if (currentPage<1){
         this.currentPage=1;
        }
        else{
         this.currentPage=currentPage;
        }
         }
         // 获取分页大小
 
         public int getPageSize() {
                 return pageSize;
         }
         // 设置分页大小
         public void setPageSize(int pageSize) {
                 this.pageSize = pageSize;
         }
         // 获取当前页记录的开始索引
         public int getBeginIndex() {
                 int beginIndex = (currentPage - 1) * pageSize; // 索引下标从0开始
                 return beginIndex;
         }
         // 计算总页数
         public int countTotalPage(int pageSize, int totalRow) {
                 int totalPage = totalRow % pageSize == 0 ? totalRow / pageSize : totalRow / pageSize + 1;
                 return totalPage;
         }
         // 返回下一页的页码
         public int getNextPage() {
 
                 if (currentPage + 1 >= this.totalPage) { // 如果当前页已经是最后页 则返回最大页
                          return this.totalPage;
                 }
                 return currentPage + 1; 
         }
         // 返回前一页的页码
 
         public int getPreviousPage() {
                 if (currentPage - 1 <= 1) {
                          return 1;
                 } else {
                          return currentPage - 1;
                 }
         }
         public boolean isHasPrevious() {
                 return hasPrevious;
         }
         public boolean isHasNext() {
                 return hasNext;
         }
         public boolean isBof() {
                 return bof;
         }
         public boolean isEof() {
                 return eof;
         }
         public boolean hasNext() {
                 return currentPage < this.totalPage;
         }
         public boolean hasPrevious() {
                 return currentPage > 1;
         }
         public boolean isFirst() {
                 return currentPage == 1;
         }
         public boolean isLast() {
                 return currentPage >= this.totalPage;
         }
         // 初始化信息
         private void init() {
 
                 this.hasNext = hasNext();
 
                 this.hasPrevious = hasPrevious();
 
                 this.bof = isFirst();
 
                 this.eof = isLast();
 
         }
}

Dao接口层代码:

package cn.tutorinfo.dao; 
import java.util.List;
import cn.tutorinfo.domain.Teacher;
public interface TeacherDao {
         //分页查询显示
         public List<Teacher> queryByPage(String hql,int beginIndex,int pageSize);
         //查询的结果记录总数
         public int queryRowCount(final String hql);

DAO实现层代码:

/*
          * 分页查询显示
          * @param hql查询的的hql语句
          * @param beginIndex 查询记录的起始索引位置
          * @param pageSize 一次查询记录个数
          * @return List<Teacher>
          */
         @SuppressWarnings("unchecked")
         public List<Teacher> queryByPage(String hql, int beginIndex, int pageSize) {
                 Session session = HibernateSessionFactory.getSessionFactory().getCurrentSession();
 
                 Transaction transaction = null;
                 try {
                          transaction = session.beginTransaction();
                          Query query = session.createQuery(hql);
                          query.setFirstResult(beginIndex);
                          query.setMaxResults(pageSize);
                          List<Teacher> list = query.list();
                          transaction.commit();
                          return list;
                 } catch (Exception e) {
                          if (null != transaction) {
                                   transaction.rollback();
                                   e.printStackTrace();
                          }
                 }
                 return null;
         }
 
      / / 查询指定HQL的结果记录总数
 
         public int queryRowCount(final String hql) {
 
                 Session session=HibernateSessionFactory.getSessionFactory().getCurrentSession();
 
                 Transaction transaction=null;
                 try{
                          transaction=session.beginTransaction();
 
                          Query query=session.createQuery(hql);
 
                          int result=query.list().size();  //计算个数
 
                          transaction.commit();
 
                          return result;
 
                 }catch (Exception e){
 
                          if (null!=transaction){
 
                                   transaction.rollback();
 
                                   e.printStackTrace();
 
                          }
 
                 }
 
                 return 0;
 
         }

 

业务逻辑层接口:

package cn.tutorinfo.service;
 
import java.util.List; 
import cn.tutorinfo.domain.Teacher; 
import cn.tutorinfo.pagination.PageResultSet; 
 
public interface TeacherService { 
         /*
           * @param pagesize 每页大小
 
          * @param page 要显示数据的页
 
          * @return 包含结果集和分页信息的数据集
 
          */
          public PageResultSet<Teacher> queryByPage(int pageSize,int Page);
 }

 

业务逻辑实现类:

//分页获取记录值
 
         public PageResultSet<Teacher> queryByPage(int pageSize, int page) {                     
                 String hql = "From Teacher";  //查询HQL语句
 
                 int totalRow = teacherDao.queryRowCount(hql); // 计算总记录个数
 
                 PageInfo pageinfo = new PageInfo(totalRow, pageSize, page);
 
                 //获取该页的记录
 
                 List<Teacher> list = teacherDao.queryByPage(hql, pageinfo.getBeginIndex(), pageinfo.getPageSize());      
                 PageResultSet<Teacher> pageResultSet = new PageResultSet<Teacher>();
                 pageResultSet.setList(list);
                 pageResultSet.setPageInfo(pageinfo);
                 return pageResultSet;
         }

 

struts2 的action中调用业务逻辑实现类来获取页的信息:

package cn.tutorinfo.struts;
import cn.tutorinfo.domain.Teacher; 
import cn.tutorinfo.pagination.PageResultSet; 
import cn.tutorinfo.service.TeacherService; 
import com.opensymphony.xwork2.ActionSupport; 
public class ListTeacherAction extends ActionSupport { 
         private static final long serialVersionUID = -7735757614996395820L;
 
         private int page;  //接受传递的页码参数
 
         private PageResultSet<Teacher> pageResultSet;
 
         private TeacherService service; // 业务逻辑组件类由Spring注入
         public int getPage() {
 
                 return page;
         } 
         public void setPage(int page) {             this.page = page;
 
         }
          public PageResultSet<Teacher> getPageResultSet() {
 
                 return pageResultSet;
 
         }
          public void setPageResultSet(PageResultSet<Teacher> pageResultSet) {
 
                 this.pageResultSet = pageResultSet;
          } 
         public void setService(TeacherService service) {
 
                 this.service = service;
         }
          @Override
          public String execute() throws Exception {          
 
                 this.pageResultSet = service.queryByPage(15,page); // 显示第page页,显示15条记录
 
                 return SUCCESS;
         } 

业务逻辑实现类中的Dao和Action中的业务逻辑组件类都由spring注入.

 

okay,以上基本完成.前台jsp页面来显示经过action处理后的分页信息:

  <!--正文标题的内容-->
             <tr>
              <td>
                              <table width="100%" border="0" cellspacing="1" cellpadding="0" class="thin">
 
                              <thead>
 
                              <tr>
 
                                   <th width="5%"><input type="checkbox" name="checkedAll" id="checkedAll"/></th>
 
                                   <th width="5%">编号</th>
 
                                   <th width="20%">讲师姓名</th>
 
                                   <th width="10%">性别</th>
 
                                   <th width="20%">讲师类别</th>
 
                                   <th widht="20%">讲师介绍</th>
 
                                   <th width="20%">基本操作</th>
 
                              </tr>
 
                              </thead>
 
                <tbody>
 
                <s:iterator value="#request.pageResultSet.list" id="teacher">
 
                <tr>
 
                   <td><input type="checkbox" name="teacherid" id="teacherid" value="${teacher.id}" /></td>
 
                   <td><s:property value="#teacher.id" /></td>
 
                   <td><s:property value="#teacher.name" /></td>
 
                   <td><s:property value="#teacher.sex" /></td>
 
                   <td><s:property value="#teacher.teacherType.teacherType" /></td>
 
                   <td>讲师详细介绍</td>
 
                   <td><a href="/course/admin/editTeacher.action?id=${teacher.id}">修改</a> | 
 
                       <a href="/course/admin/deleteTeacher.action?id=${teacher.id}" onclick="javascript:return del()">删除 </a></td>   
 
               </tr>
 
               </s:iterator>
 
               </tbody>
 
              </table>
 
                          </td>
 
                          </tr>            
                          <!--分页信息显示-->
             <tr>
 
               <td>
                             <table width="100%" border="0" cellpadding="0" cellspacing="0" class="line_table">
                <tr>
 
                   <td align="left">选择: 全选 - 反选 - 不选 </td>
 
                   <td align="right">
                                                     页码:&nbsp;&nbsp;<s:property value="pageResultSet.pageInfo.currentPage" />&nbsp;/&nbsp;<s:property value="pageResultSet.pageInfo.totalPage"/> &nbsp;&nbsp;&nbsp;                                       
 
                   <s:if test="pageResultSet.pageInfo.bof">
 
                                                             首页    第一页
 
                   </s:if>
 
                   <s:else>
 
                     <a href="listTeacher.action?page=1">首页</a> <a href="listTeacher.action?page=<s:property value="pageResultSet.pageInfo.currentPage-1"/>">上一页</a>
                   </s:else>               
                   <s:if test="pageResultSet.pageInfo.eof">
                                                         下一页   末页
                   </s:if>
                   <s:else>                                                              
                      <a href="listTeacher.action?page=<s:property value="pageResultSet.pageInfo.currentPage+1"/>">下一页</a> <a href="listTeacher.action?page=<s:property value="pageResultSet.pageInfo.totalPage"/>">末页</a>
                   </s:else>
                   </td>
                </tr>
               </table>
                             </td>
              </tr>

 

调用: http://localhost:8080/appName/listTeacher.action?page=2

 

则显示所有教师信息中的第二页中的全部数据


 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值