SSH网上商城颗粒归仓【二.分页查询数据】

背景

最近项目中用到了分页查询,其实使用方法和使用原理和.net的非常相似对于后台来说,但是对于前台我感觉跟angular4又非常的相似,我们使用使用判断,也非常的向插值绑定,所以这应该就是前端分离的一个历史演变把


执行步骤

1.封装一个分页类,相当于是公共类
2.在jsp页面写关于判断方法和执行的方法
** 判断方法
** 执行方法

 "${ pageContext.request.contextPath }/order_findByUid.action>

** 后面 必须带有参数,参数的信息为第几页的查询

例如value="pageBean.page+1"/>

3.在service中根据驱动模型对象接受我们的参数page
4.注入service
5.执行findByUid的Action方法
** 根据session中的信息获取用户id
** 调用我们的Service,把Uid和page传过去

6.执行我们的Service层
** 实现定义我们的PageBean实体,然后让我们的页和记录数总页数等信息你统一的放到放到Pagebean实体中,指向set属性
** 查询(调用D层的方法)我们的总共记录数量用于显示分为几页
** 调用我们Dao层方法,传输id,开始,限制多少条信息,返回真正的数据
7.执行Dao层
** 写执行语句
** 执行gethibernate的find方法,返回结果给我们Service中最初调用的方法
** 执行第二个方法是关于根据我们分页的数据查找出我们的数据1执行hql语句,2执行getHibernateTemplate中干execute方法
8.返回给我们的Action层
** 讲返回的数据存入到我们堆栈中也就是page中
** 返回为findUid
9.findUid传给了status,status根据你的名字找到了你的名字找到我们要返回的页面显示出数据
10.根据jsp页面设置的参数和判断我们就可以正常显示了


代码实现

pageBean

package cn.itcast.shop.utils;

import java.util.List;

/**
 * 分页类的封装
 * @author 王雪芬
 *
 */
public class PageBean {
    //当前页数
  private int page;
  //总记录数
  private int totalCount;
  //总页数
  private int totalPage;
  //每页显示的记录数
  private int limit;
  //每页显示数据的集合
  private List list;
public int getPage() {
    return page;
}
public void setPage(int page) {
    this.page = page;
}
public int getTotalCount() {
    return totalCount;
}
public void setTotalCount(int totalCount) {
    this.totalCount = totalCount;
}
public int getTotalPage() {
    return totalPage;
}
public void setTotalPage(int totalPage) {
    this.totalPage = totalPage;
}
public int getLimit() {
    return limit;
}
public void setLimit(int limit) {
    this.limit = limit;
}
public List getList() {
    return list;
}
public void setList(List list) {
    this.list = list;
}
}

jsp

 <div class="pagination">   
    <span><s:property value="pageBean.page" />/<s:property value="pageBean.totalPage" />span>
    <s:if test="pageBean.page != 1">
        <a  href="${ pageContext.request.contextPath }/oreder_findByUid.action?page=1" class="firstPage"> a>
        <a  href="${ pageContext.request.contextPath }/oreder_findByUid.action?page=pageBean.page-1"/>"class="previousPage"> a>
      s:if>
       <s:else>
        <span class="currentPage"><s:property value="#i" /> span>
        s:else>

     <s:if test="pageBean.page != pageBean.totalPage">  
     <a class="nextPage"  href="${ pageContext.request.contextPath }/order_findByUid.action?page=pageBean.page+1"/>"> a>
    <a class="lastPage" href="${ pageContext.request.contextPath }/order_findByUid.action?page=pageBean.totalPage"/>"> a>
    s:if>
 div>     

Service


    // 注入service
    private OrderService orderService;

    public void setOrderService(OrderService orderService) {
        this.orderService = orderService;
    }
    //接受page参数
    private Integer page;   
    public void setPage(Integer page) {
        this.page = page;
    }

    /**
     * 我的订单的查询
     */
            public String findByUid() {
            // 获得用户的id.
            User existUser = (User) ServletActionContext.getRequest().getSession()
                    .getAttribute("existUser");
            // 获得用户的id
            Integer uid = existUser.getUid();
            // 根据用户的id查询订单:
            PageBean pageBean = orderService.findByUid(uid, page);
            // 将PageBean数据带到页面上.
            ActionContext.getContext().getValueStack().set("pageBean", pageBean);
            return "findByUid";
        }

Service

    /**
     * 我的订单业务层
     * 
     * @param uid
     * @param page
     * @return
     */
    public PageBean findByUid(Integer uid, Integer page) {
        PageBean pageBean = new PageBean();
        // 设置当前页数:
        pageBean.setPage(page);
        // 设置每页显示记录数:
        // 显示5个
        int limit = 5;
        pageBean.setLimit(limit);
        // 设置总记录数:
        int totalCount = 0;
        totalCount = orderDao.findCountByUid(uid);
        pageBean.setTotalCount(totalCount);
        // 设置总页数
        int totalPage = 0;
        if (totalCount % limit == 0) {
            totalPage = totalCount / limit;
        } else {
            totalPage = totalCount / limit + 1;
        }
        pageBean.setTotalPage(totalPage);
        // 设置每页显示数据集合:
        int begin = (page - 1) * limit;
        List list = orderDao.findPageByUid(uid, begin, limit);
        pageBean.setList(list);
        return pageBean;
    }

Dao


    public int findCountByUid(Integer uid) {
        String hql = "select count(*) from Order o where o.user.uid = ?";
        List list = this.getHibernateTemplate().find(hql, uid);
        if (list != null && list.size() > 0) {
            return list.get(0).intValue();
        }
        return 0;
    }

    public List findPageByUid(Integer uid, int begin, int limit) {
        String hql = "from Order o where o.user.uid = ? order by o.ordertime desc";
        //执行语句1.PageHibernateCallback是为了让hibernate灵活的方式访问数据库,
        //execute使用这个方法可以让我们自己设置分页显示的数据
        List list = this.getHibernateTemplate().execute(
                new PageHibernateCallback(hql, new Object[] { uid },
                        begin, limit));
        if (list != null && list.size() > 0) {
            return list;
        }
        return null;
    }

Stuts

  <result name="findByUid">/WEB-INF/jsp/orderList.jspresult>

总结

有很多技术还没有深刻的去理解,所以大家可以看我下面的博客

你可能感兴趣的:(商城,分页,ssh)