ssm分页及插件
第一种是分页的最原始方法使用流程以及介绍
项目结构如下图所示:
就拿我的数据库中的商品来说吧,
第一步肯定是写实体类(最好跟数据库字段完全对应):如图
第二部我们来写xml文件查询的sql语句:如图
这都dao接口中的:
xml文件中的start(开始页)和size(每页的条数)是从map集合中传入的,传入map集合的原因是我们在service中把start和size
封装到了map中,接下来看看service中实现类中的代码:
@Override
public PageBean<Product> AllByPage(int currPage) {
// TODO Auto-generated method stub
PageBean<Product> page=new PageBean<>();
HashMap<String, Object> map=new HashMap<>();
//封装当前页数
page.setCurrPage(currPage);
//每页显示的数据
int pageSize=4;
page.setPageSize(pageSize);
//总记录数
int totalCount=dao.selectCount();
page.setTotalCount(totalCount);
//总页数
Double tc=(double) totalCount;
Double num=Math.ceil(tc/pageSize);
//把double类型转成int类型
page.setTotalPage(num.intValue());
map.put("start", (currPage-1)*pageSize);
map.put("size", pageSize);
List<Product> lists=dao.AllByPage(map);
//封装结果集
page.setLists(lists);
return page;
}
另外这是PageBean也就是封装商品实体类的分页的类:
package com.laoli.model;
import java.util.List;
public class PageBean <T>{
private int currPage;//当前页
private int pageSize;//每页显示的记录数
private int totalCount;//总记录数
private int totalPage;//总页数
private List<T> lists;//查询的数据
public int getCurrPage() {
return currPage;
}
public void setCurrPage(int currPage) {
this.currPage = currPage;
}
public int getPageSize() {
return pageSize;
}
public void setPageSize(int pageSize) {
this.pageSize = pageSize;
}
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 List<T> getLists() {
return lists;
}
public void setLists(List<T> lists) {
this.lists = lists;
}
@Override
public String toString() {
return "PageBean [currPage=" + currPage + ", pageSize=" + pageSize + ", totalCount=" + totalCount
+ ", totalPage=" + totalPage + ", lists=" + lists + "]";
}
}
因为我们已经在商品service的实现类中吧我们想要的数据封装到了PageBean中,所以我们返回的是一个PageBean类型,controller接收到的也是一个PageBean类型,接下来是controller中的代码:
@RequestMapping("/main")
public String men(Model model,@RequestParam(value = "currPage",defaultValue = "1",required = false) int currPage) {
//这是我们从service拿到的PageBean类型的
PageBean<Product> list=service.AllByPage(currPage);
model.addAttribute("pro", list);
return"main";
}
因为我的每页显示的条数在service实现类中已经写死了,所以我就只传过去一个当前页数就可以了,当前页数默认是1,当前页数是从页面传入的,接下来就是jsp页面的代码:
<h6 align="left">商品列表</h6>
<div class="row">
<c:forEach items="${pro.lists}" var="pro">
<div class="col-xs-6 col-md-3">
<a href="img?filename=${pro.imgname}" class="thumbnail">
<img src="${pageContext.request.contextPath}/${pro.img}"title="${pro.name}">
</a>
</div>
</c:forEach>
</div>
<nav aria-label="Page navigation">
<ul class="pagination pagination-lg" style="padding-left: 40%">
<li>
<c:if test="${pro.currPage!=1}">
<a href="main?currPage=${pro.currPage-1}" aria-label="Previous">
<span aria-hidden="true">上一页</span>
</a>
</c:if>
</li>
<c:forEach begin="1" end="${pro.totalPage}" var="page">
<li><a href="main?currPage=${page}">${page}</a></li>
</c:forEach>
<li>
<c:if test="${pro.currPage<pro.totalPage}">
<a href="main?currPage=${pro.currPage+1}" aria-label="Next">
<span aria-hidden="true">下一页</span>
</a>
</c:if>
</li>
</ul>
</nav>
特别要注意点是我们从控制层传过来的名字是pro,但是我们用jstl遍历的名字不是他,而是PageBean中的封装进去的商品实体类,
名字是lists,所以我们遍历的就是他