最近项目中用到了分页查询,其实使用方法和使用原理和.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页面设置的参数和判断我们就可以正常显示了
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;
}
}
<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
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";
}
/**
* 我的订单业务层
*
* @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;
}
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;
}
<result name="findByUid">/WEB-INF/jsp/orderList.jspresult>
有很多技术还没有深刻的去理解,所以大家可以看我下面的博客