SSH-------分页查询

看到网上讲解的分页查询不少,针对SSH的却不多,故而把自己做的过程贴出来:

1.首先 咱得先有个pageBean 存放各种页面信息 如当前页码 每一页几个字段之类 贴代码如下:

public class PageBean {
    private List<CrmPost> list; //要返回的某一页记录列表
    private int allRow; //总记录数
    private int totalPage;  //总页数
    private int currentPage;  //当前页
    private int pageSize;  //每页的记录数
    private boolean isFirstPage;  //是否为当前第一页
    private boolean isLastPage;  //是否为最后一页
    private boolean hasPreviousPage;  //是否有前一页
    private boolean hasNextPage;  //是否有下一页
   /**
     * 初始化分页信息
     */
    public void init(){
        this.isFirstPage = isFirstPage;
        this.isLastPage = isLastPage;
        this.hasPreviousPage = hasPreviousPage;
        this.hasNextPage = hasNextPage;
    }
    /**
     * 计算总页数  静态方法
     * @param pageSize  每页的记录数
     * @param allRow  总记录数
     * @return 总页数
     */
    public static int countTatalPage(final int pageSize,final int allRow){
        int toalPage = allRow % pageSize == 0 ? allRow/pageSize : allRow/pageSize + 1;
        return toalPage;
    }
    /**
     * 计算当前页开始的记录
     * @param pageSize 每页记录数
     * @param currentPage 当前第几页
     * @return 当前页开始记录号
     */
    public static int countOffset(final int pageSize,final int currentPage){
        final int offset = pageSize * (currentPage - 1);
        return offset;
    }
    /**
     * 计算当前页,若为0或者请求的URL中没有“?page = ”则用1代替
     * @param page 传入的参数(可能为空,即0  则返回1)
     * @return
     */
    public static int countCurrentPage(int page){
        final int curpage = (page == 0 ? 1 : page);
        return curpage;
    }
     /** 每个属性的set/get方法省略
 }

2.然后先说下jsp页面部分

<s:iterator value="#session.pageBean">
<table border="0" cellspacing="0" cellpadding="0" align="center">
    <tr>
        <td align="right">
            <span><s:property value="currentPage"/> 页/共<s:property value="totalPage"/></span>
        <span>
            <s:if test="%{currentPage==1}">
                [首页]  [上一页]
            </s:if>
            <s:else>
           <a href="action?page=1">[首页]</a>&nbsp;&nbsp;
            <a href="action?page=<s:property value="%{currentPage-1}"/>"> [上一页]</a>&nbsp;&nbsp;
            </s:else>
            <s:if test="%{currentPage != totalPage}">
            <a href="action?page=<s:property value="%{currentPage+1}"/>">[下一页]</a>&nbsp;&nbsp;
            <a href="action?page=<s:property value="totalPage"/>">[尾页]</a>
            </s:if>
            <s:else>
                [下一页] [尾页]
            </s:else>
        </span>
        </td>
    </tr>
</table>
</s:iterator>
主要是其中的判断,其实意思很简单 判断现在是不是第一页(首页) 首页得话 我就不让你点击上一页 和首页标识
                          再判断是不是尾页 尾页得话就不让你点击下一页和尾页标识
正常页码(第一页可以点击下一页,尾页可以点击上一页)的话,点击上一页,把currentPage(pageBean
里当前页码的属性)-1作为参数传给action  下一页就是currentPage+1作为参数传给
3 再说下action里 其中最重要的参数就是 int page = 1;了 他是运用动态参数封装中属性驱动的普通属性方法
从jsp取值,默认为1,就是说第一次登录就看第一页 当然你也可以默认3 4 5 ...贴代码:
public class PageAction extends ActionSupport{
    @Qualifier("postService")
    @Autowired
    private PostService postService;
    private PageBean pageBean;
    private List<CrmPost> postList;
    private int page = 1;

    public String execute()throws Exception{
       pageBean = postService.queryForPage(2, page);//获取封装了分页信息和数据的pageBean
       postList = pageBean.getList(); //获取数据
        System.out.println("我就看看"+pageBean.getCurrentPage());
        //当前页要显示的 这一步是我工程的代码需要 童鞋们直接putpageBean
        //就好 其中已经封装了list 可以在jsp页面自行取值
        ActionContext.getContext().getSession().put("CrmPost",postList);
        //pageBean
        ActionContext.getContext().getSession().put("pageBean",pageBean);
           return SUCCESS;
    }
     /**依然省略get/set
}
 然后是service层,我再这一层里跟pageBean的逻辑运算们交互 set进各种数据 得到针对当前页完整的一个
 pageBean 方法为:
@Override
public PageBean queryForPage(int pageSize, int page) {
    System.out.println("每页几个"+pageSize+"和当前页码"+page);
   //总记录的数  调用另一个方法getAmount()
     (调用DAO得到PO的所有信息.size就是个数)
     获得总信息个数allRow
     int allRow = getAmount();
    //总页数
    int tatalPage = PageBean.countTatalPage(pageSize, allRow);
    //当前页开始记录数
    int offset = PageBean.countOffset(pageSize, page);
    //每页记录数 pageSize
    //当前页 currenPage
    int currentPage = PageBean.countCurrentPage(page);
    // 调用 得到要显示的那几个CrmPost 放进一个集合
    List<CrmPost> list = postDao.queryForPage(offset, pageSize);
    //把分页信息保存到Bean当中
    PageBean pageBean  = new PageBean();
    pageBean.setPageSize(pageSize);
    pageBean.setCurrentPage(currentPage);
    pageBean.setAllRow(allRow);
    pageBean.setTotalPage(tatalPage);
    pageBean.setList(list);
    pageBean.init();

    return pageBean;
}
最后的dao层获得的应该是jsp中当前页面要显示的 我在用getHibernateTemple()时候 如网上说的
(Number)getHibernateTemplate.find("select count(*) from 对象类").
listIterator().next()).intValue();
最后的.intValue()并没有联想 所以我换成跟平时写的hql语句不同的,通过query直接获取,方法代码:
/**
 * 分页查询
 *   查询条件
 * @param offset  开始记录
 * @param length  一次查询几条记录
 * @return 查询的记录集合
 */
@Override
public List<CrmPost> queryForPage(int offset, int length) {
    Session session = getSessionFactory().openSession();
    Query q = session.createQuery("from CrmPost");
    q.setFirstResult(offset);
    q.setMaxResults(length);
    List<CrmPost> list = q.list();
    return list;
}
至此一个分页就完成了,大家闲暇之时不妨自己玩玩儿~~







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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值