天天看点

SSH网上商城颗粒归仓【二.分页查询数据】背景执行步骤代码实现总结

背景

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

执行步骤

1.封装一个分页类,相当于是公共类

2.在jsp页面写关于判断方法和执行的方法

** 判断方法

<s:if>

** 执行方法

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

例如<s:property 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<T> {
    //当前页数
  private int page;
  //总记录数
  private int totalCount;
  //总页数
  private int totalPage;
  //每页显示的记录数
  private int limit;
  //每页显示数据的集合
  private List<T> 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<T> getList() {
    return list;
}
public void setList(List<T> 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">&nbsp;</a>
        <a  href="${ pageContext.request.contextPath }/oreder_findByUid.action?page=<s:property value="pageBean.page-1"/>"class="previousPage">&nbsp;</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=<s:property value="pageBean.page+1"/>">&nbsp;</a>
    <a class="lastPage" href="${ pageContext.request.contextPath }/order_findByUid.action?page=<s:property value="pageBean.totalPage"/>">&nbsp;</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<Order> pageBean = orderService.findByUid(uid, page);
            // 将PageBean数据带到页面上.
            ActionContext.getContext().getValueStack().set("pageBean", pageBean);
            return "findByUid";
        }
           

Service

/**
     * 我的订单业务层
     * 
     * @param uid
     * @param page
     * @return
     */
    public PageBean<Order> findByUid(Integer uid, Integer page) {
        PageBean<Order> pageBean = new PageBean<Order>();
        // 设置当前页数:
        pageBean.setPage(page);
        // 设置每页显示记录数:
        // 显示5个
        int limit = ;
        pageBean.setLimit(limit);
        // 设置总记录数:
        int totalCount = ;
        totalCount = orderDao.findCountByUid(uid);
        pageBean.setTotalCount(totalCount);
        // 设置总页数
        int totalPage = ;
        if (totalCount % limit == ) {
            totalPage = totalCount / limit;
        } else {
            totalPage = totalCount / limit + ;
        }
        pageBean.setTotalPage(totalPage);
        // 设置每页显示数据集合:
        int begin = (page - ) * limit;
        List<Order> 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<Long> list = this.getHibernateTemplate().find(hql, uid);
        if (list != null && list.size() > ) {
            return list.get().intValue();
        }
        return ;
    }

    public List<Order> 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<Order> list = this.getHibernateTemplate().execute(
                new PageHibernateCallback<Order>(hql, new Object[] { uid },
                        begin, limit));
        if (list != null && list.size() > ) {
            return list;
        }
        return null;
    }
           

Stuts

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

总结

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

继续阅读