一.定义分页功能的类
package cn.fr.itsource.cms.page;
import java.util.ArrayList;
import java.util.List;
/**
* @author 分页对象:后台储存的值
*
* data:数据库查询的数据
*/
public class PageList<T> {
//当前页 -> 前台传过来
private int currentPage = 1;
//每页条数 -> 前台传过来/自己定义
private int pageSize = 10;
//首页(第一页)
private int firstPage = 1;
//上一页:计算出来 currentPage>1?currentPage-1:1(当前页>1?当前页-1:1)
private int prevPage;
//下一页:计算出来 currentPage<lastPage?currentPage+1:lastPage
private int nextPage;
//尾页 == 总页数
private int lastPage;
//总页数 计算出来 totalCount%pageSize==0?totalCount/pageSize:totalCount/pageSize+1
private int totalPage;
//总条数 -> 数据库中查询出来
private int totalCount;
//当前页的数据 -> 数据库中查询出来
private List<T> data = new ArrayList<>();
public PageList() {
}
/**
* @param currentPage:当前页:前台传值
* @param pageSize:每页条数:前台传值
* @param totalCount:总条数
* @param data:数据库中查询的集合
*/
public PageList(int currentPage, int pageSize, int totalCount, List<T> data) {
this.currentPage = currentPage;
this.pageSize = pageSize;
this.totalCount = totalCount;
this.data = data;
//计算上一页:prevPage = currentPage>1?currentPage-1:1
this.prevPage = this.currentPage > 1 ? this.currentPage-1:1;
//总页数 计算出来 totalCount%pageSize==0?totalCount/pageSize:totalCount/pageSize+1
//总条数%每页条数== 0 ? 总条数/每页条数:总条数/每页条数+1
this.totalPage = this.totalCount%this.pageSize == 0 ?this.totalCount/this.pageSize:this.totalCount/this.pageSize+1;
//最后一页=总页数
this.lastPage = this.totalPage;
//计算下一页 当前页<总页数?当前页+1:总页数;
this.nextPage = this.currentPage < this.totalPage ? this.currentPage+1:this.totalPage;
}
public int getCurrentPage() {
return currentPage;
}
public void setCurrentPage(int currentPage) {
this.currentPage = currentPage;
}
public int getPageSize() {
return pageSize;
}
public void setPageSize(int pageSize) {
this.pageSize = pageSize;
}
public int getFirstPage() {
return firstPage;
}
public void setFirstPage(int firstPage) {
this.firstPage = firstPage;
}
public int getPrevPage() {
return prevPage;
}
public void setPrevPage(int prevPage) {
this.prevPage = prevPage;
}
public int getNextPage() {
return nextPage;
}
public void setNextPage(int nextPage) {
this.nextPage = nextPage;
}
public int getLastPage() {
return lastPage;
}
public void setLastPage(int lastPage) {
this.lastPage = lastPage;
}
public int getTotalPage() {
return totalPage;
}
public void setTotalPage(int totalPage) {
this.totalPage = totalPage;
}
public int getTotalCount() {
return totalCount;
}
public void setTotalCount(int totalCount) {
this.totalCount = totalCount;
}
public List<T> getData() {
return data;
}
public void setData(List<T> data) {
this.data = data;
}
}
二.接收前台传过来的数据,来判断当前是第几页等
package cn.fr.itsource.cms.query;
/**
*
* 拼接SQL的条件
* 现在记住:用户接收前端传过来的查询数据
*
* 然后再DO层里面实现 接收前台的值,传递给后台page,然后查询后台数据
*/
public class SqlCondition {
//当前页
private int currentPage = 1;
//每页条数
private int pageSize = 5;
//职位标题
private String title;
//职位类型:1是全职,0是兼职
private Integer positiontype;
public int getCurrentPage() {
return currentPage;
}
public void setCurrentPage(int currentPage) {
this.currentPage = currentPage;
}
public int getPageSize() {
return pageSize;
}
public void setPageSize(int pageSize) {
this.pageSize = pageSize;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public Integer getPositiontype() {
return positiontype;
}
public void setPositiontype(Integer positiontype) {
this.positiontype = positiontype;
}
//高级查询:模糊查询
public String createWhereSql(){
String wheresql="";
if (title!=null && !"".equals(title)) {
wheresql += " and title like '%"+title+"%' ";
}
if (positiontype != null) {
wheresql += " and positiontype = "+positiontype;
}
//replaceFirst:替换第一次出现的内容
return wheresql.replaceFirst("and","where");
}
@Override
public String toString() {
return "SqlCondition [currentPage=" + currentPage + ", pageSize=" + pageSize + ", title=" + title
+ ", positiontype=" + positiontype + "]";
}
}
三.修改dao层的sql查询语句
/**
* 最后返回的是PageList对象,里面都要有值
* PageList(int currentPage, int pageSize, int totalCount, List<T> data)
*/
@Override
public PageList<Jobs> queryAll(SqlCondition condition) {
//从前台页面 拿到当前页与每页条数
int currentPage = condition.getCurrentPage();
int pageSize = condition.getPageSize();
//从前台页面获得高级查询:模糊查询的内容(拼接sql语句)
String createWhereSql = condition.createWhereSql();
//一.查询总条数
//1.1 准备查询总条数的sql
String sql = "select count(*) from v_jobs" + createWhereSql;
//1.2执行sql拿到总条数
Integer totalCount = jdbcTemplate.queryForObject(sql,Integer.class);
//二.查询当前页的数据
//2.1 计算当前页是从第几条数据开始的
int beginIndex = (currentPage-1) * pageSize;
//2.2 准备相应的SQL
String dataSql = "select * from v_jobs "+ createWhereSql +" limit "+ beginIndex +","+pageSize;
//2.3 执行查询功能
List<Jobs> data= jdbcTemplate.query(dataSql, new BeanPropertyRowMapper<>(Jobs.class));
//三.创建PageList对象,并把需要的数据装进list对象里面返回
PageList<Jobs> pageList = new PageList<Jobs>(currentPage,pageSize,totalCount,data);
return pageList;
}
四.js里面的分页功能显示
<!--分页-->
<nav class="navbar-right">
<ul class="pagination" id="paging">
<li><span>当前第${pageList.currentPage}页</span></li>
<li><a
href="/index?currentPage=1&pageSize=${pageList.pageSize}"> <span
aria-hidden="true">首页</span>
</a></li>
<li><a
href="/index?currentPage=${pageList.prevPage}&pageSize=${pageList.pageSize}"
aria-label="上一页"> <span aria-hidden="true">上一页</span>
</a></li>
<li></li>
<li><a
href="/index?currentPage=${pageList.nextPage}&pageSize=${pageList.pageSize}"
aria-label="下一页"> <span aria-hidden="true">下一页</span>
</a></li>
<li><a
href="/index?currentPage=${pageList.lastPage}&pageSize=${pageList.pageSize}"
aria-label="尾页"> <span aria-hidden="true">尾页</span>
</a></li>
<li><span>总页数:共${pageList.totalPage}页</span> <span>总数据:共${pageList.totalCount}条</span>
</li>
<!-- 跳转页数,和每页显示数量 for表单ID改为:paging可显示一条线-->
<form style="margin-top:0px" class="pagination" name="fc" id="myForm" action="/index" method="get">
<li><span>跳转页数 : <input type="text"
style="height: 20px; width: 30px" name="currentPage"
value="${pageList.currentPage}" placeholder="请输入跳转页数"></span></li>
<li><a href="javascript:myFunction()" ><span aria-hidden="true">GO!</span>
</a></li>
<script>
function myFunction() {
document.getElementById("myForm").submit();
}
</script>
<li><span> 每页显示条数 <select name="pageSize"
style="text-align: center">
<option value="1"
<c:if test="${pageList.pageSize==1}">selected</c:if>>1</option>
<option value="5"
<c:if test="${pageList.pageSize==5}">selected</c:if>>5</option>
<option value="10"
<c:if test="${pageList.pageSize==10}">selected</c:if>>10</option>
</select>
</span></li>
</form>
</ul>
</nav>