搭建环境
参考:ssm的简单整合
分页代码
实体类
public class Article {
private String id;
private String name;
private String content;
//省略get、set
}
Mapper接口
public interface ArticleMapper {
List<Article> findAllArticlePage(@Param("startIndex") Integer startIndex,
@Param("pageSize") Integer pageSize);
Integer findTotalNum();
}
Mapper.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.wqh.mapper.ArticleMapper">
<select id="findAllArticlePage" resultType="article">
SELECT * from article limit #{startIndex},#{pageSize};
</select>
<select id="findTotalNum" resultType="Integer">
SELECT count(*) from article;
</select>
</mapper>
service
@Service
public class ArticleServiceImpl implements ArticleService {
@Autowired
private ArticleMapper articleMapper;
public Page findArticlePage(String num, String url) {
int pageNum = 1;//默认为第一页
if(num != null && !num.equals("")){
pageNum = Integer.parseInt(num);
}
int totalRecords = articleMapper.findTotalNum();//得到总的记录数
Page page = new Page(pageNum, totalRecords);
// 设置每页的记录
// page.setPageSize(5);
List<Article> articlePage = articleMapper.findAllArticlePage(page.getStartIndex(), page.getPageSize());
page.setUri(url);
page.setRecords(articlePage);
return page;
}
}
action
@Controller
@RequestMapping("/articleAction")
public class ArticleAction {
@Autowired
private ArticleService articleService;
@RequestMapping("/findPage")
public String findPage(Model model,String pageNum){
Page page = articleService.findArticlePage(pageNum, "/articleAction/findPage.action");
model.addAttribute("page",page);
return "search";
}
}
page
分页的关键类
public class Page {
private List records;// 存放分页记录
private int currentPageNum;// 当前页码
private int totalPage;// 总页数
private int pageSize = 5;// 每页显示的记录条数,设置默认值
private int totalRecords;// 总记录条数
private int startIndex;// 每页记录开始的索引
private int prePageNum;// 上一页
private int nextPageNum;// 下一页
private int startPage;// 开始页码
private int endPage;// 结束页码
private String uri;// 查询分页的地址
public Page(int currentPageNum, int totalRecords) {
this.currentPageNum = currentPageNum;
this.totalRecords = totalRecords;
// 计算总页数
totalPage = totalRecords % pageSize == 0 ? totalRecords / pageSize : totalRecords / pageSize + 1;
// 计算每页开始记录的索引
startIndex = (currentPageNum - 1) * pageSize;
// 计算开始页码和结束页码:与当前页码有关
/*
* 动态显示页码
* 当前页码 应该显示的样子 默认 1 2 3 4 5 2 1 2 3 4 5 4 2 3 4 5 6 7 5 6 7 8 9 9 6 7 8
* 9 10
*/
if (totalPage > 5) {
// 超出5页
startPage = currentPageNum - 2;
endPage = currentPageNum + 2;
if (startPage < 1) {
startPage = 1;
endPage = 5;
}
if (endPage > totalPage) {
endPage = totalPage;
startPage = totalPage - 4;
}
} else {
// 总共没有5页
startPage = 1;
endPage = totalPage;
}
}
public int getStartPage() {
return startPage;
}
public void setStartPage(int startPage) {
this.startPage = startPage;
}
public String getUri() {
return uri;
}
public void setUri(String uri) {
this.uri = uri;
}
public int getEndPage() {
return endPage;
}
public void setEndPage(int endPage) {
this.endPage = endPage;
}
public List getRecords() {
return records;
}
public void setRecords(List records) {
this.records = records;
}
public int getCurrentPageNum() {
return currentPageNum;
}
public void setCurrentPageNum(int currentPageNum) {
this.currentPageNum = currentPageNum;
}
public int getTotalPage() {
return totalPage;
}
public void setTotalPage(int totalPage) {
this.totalPage = totalPage;
}
public int getPageSize() {
return pageSize;
}
public void setPageSize(int pageSize) {
this.pageSize = pageSize;
}
public int getTotalRecords() {
return totalRecords;
}
public void setTotalRecords(int totalRecords) {
this.totalRecords = totalRecords;
}
public int getStartIndex() {
return startIndex;
}
public void setStartIndex(int startIndex) {
this.startIndex = startIndex;
}
public int getPrePageNum() {
prePageNum = currentPageNum - 1;
if (prePageNum < 1)
prePageNum = 1;
return prePageNum;
}
public void setPrePageNum(int prePageNum) {
this.prePageNum = prePageNum;
}
public int getNextPageNum() {
nextPageNum = currentPageNum + 1;
if (nextPageNum > totalPage)
nextPageNum = totalPage;
return nextPageNum;
}
public void setNextPageNum(int nextPageNum) {
this.nextPageNum = nextPageNum;
}
}
页面
<div class="left">
<c:forEach items="${page.records}" var="ar">
<dl>
<dt>${ar.id}</dt>
<dd>
<span>${ar.name}</span> ${ar.content}
<p><em></em></p>
</dd>
</dl>
</c:forEach>
<%--总页数大于1,显示分页,这里分页代码可以抽取出来,这样就可以实现代码的重用--%>
<c:if test="${page.totalPage>1}">
<div class="page">
<ul>
<li><a href="${pageContext.request.contextPath}/${page.uri}?pageNum=${page.prePageNum}">上一页</a></li>
<c:forEach begin="${page.startPage}" end="${page.endPage}" varStatus="vs" var="num">
<li class="${page.currentPageNum==num?'check':''}">
<a href="${pageContext.request.contextPath}/${page.uri}?pageNum=${num}" >${num}</a>
</li>
</c:forEach>
<li><a href="${pageContext.request.contextPath}/${page.uri}?pageNum=${page.nextPageNum}">下一页</a></li>
</ul>
</c:if>
</div>
</div>
访问
http://localhost:8080/SpringBlog//articleAction/findPage.action
具体访问链接看自己的项目
总记录为18条,每页5条记录,分页成功