cms分页功能实现

一.定义分页功能的类

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>

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值