分页
真分页
点击到那一夜的数据,我们就使用范围查询
Select * from jobs where ... limit 0,3
假分页
我们把所有数据查出来,放到内存中
分页的实现:
我们创建一个分页的工具类,
package cn.jiedada.util; import java.util.List; /**这是一个做分页的分为,当前页,下一页,上一页,总页数,尾页,首页,每一页的大小, * 当前页直接获得 * 算出总页数 this.totalPage = this.totalNum%pageSize==0?this.totalNum/pageSize:this.totalNum/pageSize+1; 算出前一页 this.prePage = this.localPage==1? 1 : this.localPage-1; 算出后一页 this.nextPage = this.localPage==this.totalPage? this.totalPage : this.localPage+1; * @author * * @param <T> */ public class PageBeanUtil<T> { private Integer localPage; //总页数 private Integer totalPage; //每页显示数量 private Integer pageSize = 5; //总数据量 private Integer totalNum; //首页 private Integer firstPage = 1; //上一页 private Integer prePage; //下一页 private Integer nextPage; //尾页 private Integer lastPage; //显示的数据 private List<T> list; public PageBeanUtil() { } public PageBeanUtil(Integer localPage,Integer totalNum) { super(); this.localPage = localPage; this.totalNum = totalNum; //算出总页数 this.totalPage = this.totalNum%pageSize==0?this.totalNum/pageSize:this.totalNum/pageSize+1; //算出前一页 this.prePage = this.localPage==1? 1 : this.localPage-1; //算出后一页 this.nextPage = this.localPage==this.totalPage? this.totalPage : this.localPage+1; this.lastPage = this.totalPage; } public Integer getLocalPage() { return localPage; } public void setLocalPage(Integer localPage) { this.localPage = localPage; } public Integer getTotalPage() { return totalPage; } public void setTotalPage(Integer totalPage) { this.totalPage = totalPage; } public Integer getPageSize() { return pageSize; } public void setPageSize(Integer pageSize) { this.pageSize = pageSize; } public Integer getTotalNum() { return totalNum; } public void setTotalNum(Integer totalNum) { this.totalNum = totalNum; } public Integer getFirstPage() { return firstPage; } public void setFirstPage(Integer firstPage) { this.firstPage = firstPage; } public Integer getPrePage() { return prePage; } public void setPrePage(Integer prePage) { this.prePage = prePage; } public Integer getNextPage() { return nextPage; } public void setNextPage(Integer nextPage) { this.nextPage = nextPage; } public Integer getLastPage() { return lastPage; } public void setLastPage(Integer lastPage) { this.lastPage = lastPage; } public List<T> getList() { return list; } public void setList(List<T> list) { this.list = list; } @Override public String toString() { return "PageBeanUtil [localPage=" + localPage + ", totalPage=" + totalPage + ", pageSize=" + pageSize + ", totalNum=" + totalNum + ", firstPage=" + firstPage + ", prePage=" + prePage + ", nextPage=" + nextPage + ", lastPage=" + lastPage + ", list=" + list + "]"; } }
通过这里面的构造方法,就能直接封装为一个对象,这里面都能通过计算获得,但是tolalNum是需要我们去查询数据库的
在service层中我们做的语句为
@Override public PageBeanUtil<Jobs> page(Integer localPage) { //查询中条数 Integer totalNum = dao.findNum(); if(localPage==null){ localPage=1; } //构造方法 PageBeanUtil<Jobs> pageBean = new PageBeanUtil<Jobs>(localPage, totalNum); //查询 List<Jobs> list = dao.selectLimt((localPage-1)*pageBean.getPageSize(),pageBean.getPageSize()); pageBean.setList(list); return pageBean; }
@Override public Integer findNum() { return template.queryForObject("select count(id) from jobs", Integer.class); } @Override public List<Jobs> selectLimt(int index, Integer pageSize) { // TODO Auto-generated method stub return template.query("SELECT * FROM view_jobs_city LIMIT ?,?", new BeanPropertyRowMapper<Jobs>(Jobs.class),index,pageSize); }
这是dao层的
<div class="container job-table"> <table class="table table-hover"> <tr> <th class="hidden-sm">编号</th> <th>工作职位</th> <th>地点</th> <th>人数</th> <th>薪资待遇</th> <th>是否启用</th> <th>发布时间</th> <th>操作</th> </tr> <c:forEach items="${pageBean.list }" var="j"> <tr> <th>#${j.id }</th> <th>${j.title }</th> <th>${j.cname }</th> <th>${j.jobnum }</th> <th>${j.treatment }</th> <th> <c:if test="${j.isenabled }" var="s"> <span class="glyphicon glyphicon-ok" aria-hidden="true"></span> </c:if> <c:if test="${!s }"> <span class="glyphicon glyphicon-remove" cia-hidden="true"></span> </c:if> </th> <th>${j.inputdate }</th> <th> <a href="system/jobs/update?id=${j.id }" class="btn-default tableA"><span class="glyphicon glyphicon-pencil" aria-hidden="true">修改</span></a> <a href="system/jobs/del?id=${j.id }" class="btn-default tableA"><span class="glyphicon glyphicon-trash" aria-hidden="true">删除</span></a> </th> </tr> </c:forEach> </table> <!--分页--> <nav class="navbar-right"> <ul class="pagination" id="paging"> <li> <span>当前第${pageBean.localPage }页</span> </li> <li> <a href="system/jobs/page?localPage=1"> <span aria-hidden="true">首页</span> </a> </li> <li> <a href="system/jobs/page?localPage=${pageBean.prePage }" aria-label="上一页"> <span aria-hidden="true">上一页</span> </a> </li> <li> </li> <li> <a href="system/jobs/page?localPage=${pageBean.nextPage }" aria-label="下一页"> <span aria-hidden="true">下一页</span> </a> </li> <li> <a href="system/jobs/page?localPage=${pageBean.lastPage }" aria-label="尾页"> <span aria-hidden="true">尾页</span> </a> </li> <li> <span>总页数:共${pageBean.totalPage }页</span> <span>总数据:共${pageBean.totalNum }条</span> </li> </ul> </nav> </div> </body>
这是前端页面的数据反馈
高级查询

我们输入内容返回相应的数据,还要查看职位是否发布
我们可以有4中情况,这里我们怎么处理sql语句呢?
做一个工具类,判断我们需要使用的sql
package cn.jiedada.util; /**为了判断传入参数,改变sql语句,主要用于前端职位,是否全职查询 * 的是不是 * getCondition通过该方法获得 * @author 杰大大是真滴帅 * */ public class JobsCondition { // 职位名称 private String title; // 职位类型 // private Integer positiontype; public static String getCondition(String title,Integer positiontype) { //SELECT * FROM view_jobs_city where isenabled = 1 and title like '%会%' //这里最好为""因为后面拼接的时候可以拼接多种,不要写死了 String sql=" "; if(title!=null && !title.trim().equals("")){ sql +=" and title like '%"+title+"%' "; }if(positiontype!=null){ sql +=" and positiontype ="+positiontype+" "; } return sql; } public JobsCondition() { } 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; } @Override public String toString() { return "JobsCondition [title=" + title + ", positiontype=" + positiontype + "]"; } }
控制层代码
package cn.jiedada.controller.front; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.RequestMapping; import cn.jiedada.damain.Jobs; import cn.jiedada.service.IJobsService; import cn.jiedada.util.JobsCondition; import cn.jiedada.util.PageBeanUtil; @Controller @RequestMapping("/jobs") public class JobsController { @Autowired private IJobsService service; @RequestMapping("/page") public String type(Integer localPage,Model model,JobsCondition condition) { PageBeanUtil<Jobs> pageBean = service.page(localPage,condition); model.addAttribute("pageBean",pageBean); model.addAttribute("condition", condition); return "join_us_info"; } }
服务层的代码
@Override public PageBeanUtil<Jobs> page(Integer localPage, JobsCondition condition) { String sql = JobsCondition.getCondition(condition.getTitle(), condition.getPositiontype()); Integer totalNum = dao.indeFindNum(sql); if(localPage==null){ localPage=1; } PageBeanUtil<Jobs> pageBean = new PageBeanUtil<Jobs>(localPage, totalNum); List<Jobs> list = dao.selectLimt((localPage-1)*pageBean.getPageSize(), pageBean.getPageSize(),sql); pageBean.setList(list); return pageBean; }
前端数据接收
<%@ page pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE html>
<html>
<head>
<base href="${pageContext.request.contextPath }/">
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<!-- 上述3个meta标签*必须*放在最前面,任何其他内容都*必须*跟随其后! -->
<title>源码物流校招</title>
<link rel="stylesheet" href="css/bootstrap-theme.min.css" />
<!--引入bootstrap样式文档-->
<link rel="stylesheet" href="css/bootstrap.min.css" />
<script type="text/javascript" src="js/jquery.min.js"></script>
<script type="text/javascript" src="js/bootstrap.min.js"></script>
<link rel="stylesheet" href="css/commons.css" />
</head>
<body>
<!--导航条-->
<nav class="navbar navbar-inverse navbar-fixed-top">
<div class="container">
<!-- 导航上Logo和目录显示 -->
<div class="navbar-header">
<button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#index-navbar" aria-expanded="false">
<span class="sr-only">导航目录</span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<a class="navbar-brand" href="javascript:void(0);">源码物流校园招聘网</a>
</div>
<!-- 导航上其他按钮-->
<div class="collapse navbar-collapse navbar-right" id="index-navbar">
<ul class="nav navbar-nav">
<li>
<a href="index.html">首页</a>
</li>
<li>
<a href="about.html">走进源码</a>
</li>
<li>
<a href="talents.html">人才发展</a>
</li>
<li>
<a href="javascript:void(0);">职位列表</a>
</li>
<li>
<a href="qa.html">Q&A</a>
</li>
</ul>
</div>
<!-- /.navbar-collapse -->
</div>
<!-- /.container-fluid -->
</nav>
<!--职位搜索-->
<div class="container" style="border: 1px solid #dcdcdc;padding-top: 30px;padding-bottom: 30px;margin-top: 60px;">
<span>
<img src="imgs/join_us_search.jpg" alt="">
</span>
<div class="row" style="padding-top: 30px;">
<form class="form-inline" action="jobs/page">
<div class="form-group col-md-3">
<label for="jobTitle">职位名称</label>
<input type="text" class="form-control" name="title" value="${condition.title }" id="jobTitle" placeholder="职位名称">
</div>
<div class="form-group col-md-3" style="padding-top: 5px;">
<label for="workingTime">工作时间:</label>
<label class="radio-inline">
<input type="radio" name="positiontype" id="workingTime" value=""
<c:if test="${condition.positiontype==null }">checked="checked"</c:if>> 全部
</label>
<label class="radio-inline">
<input type="radio" name="positiontype" id="workingTime" value="1"
<c:if test="${condition.positiontype==1 }">checked="checked"</c:if>
> 全职
</label>
<label class="radio-inline">
<input type="radio" name="positiontype" id="workingTime" value="0"
<c:if test="${condition.positiontype==0 }">checked="checked"</c:if>
> 兼职
</label>
</div>
<button type="submit" class="btn btn-default">搜索职位</button>
</form>
</div>
</div>
<!--职位列表-->
<div class="container job-table">
<span>
<img src="imgs/index_title_zw.jpg" alt="">
<img src="imgs/index_title_more.jpg" alt="">
</span>
<table class="table table-hover">
<c:forEach items="${pageBean.list }" var="j">
<tr>
<th>#${j.id }</th>
<th>${j.title }</th>
<th>${j.cname }</th>
<th>${j.jobnum }</th>
<th>${j.treatment }</th>
<th>${j.inputdate }</th>
<th>
<a href="freemakser/${j.htmlurl }">职位详情</a>
</th>
</tr>
</c:forEach>
</table>
<!--分页-->
<nav class="navbar-right">
<ul class="pagination" id="paging">
<li>
<span>当前第${pageBean.localPage }页</span>
</li>
<li>
<a href="jobs/page?localPage=1">
<span aria-hidden="true">首页</span>
</a>
</li>
<li>
<a href="javascript:go(${pageBean.prePage })" aria-label="上一页">
<span aria-hidden="true">上一页</span>
</a>
</li>
<li>
</li>
<li>
<a href="javascript:go(${pageBean.nextPage })" aria-label="下一页">
<span aria-hidden="true">下一页</span>
</a>
</li>
<li>
<a href="javascript:go(${pageBean.lastPage })" aria-label="尾页">
<span aria-hidden="true">尾页</span>
</a>
</li>
<li>
<span>总页数:共${pageBean.totalPage }页</span>
<span>总数据:共${pageBean.totalNum }条</span>
</li>
</ul>
</nav>
</div>
<!--友情链接 手机端的时候,就隐藏掉-->
<div class="container hidden-xs hidden-sm" id="footer-link">
<img src="imgs/index_link_img.jpg" alt="" class="out-border-left">
<a href="" class="out-border-left">源码时代官网</a>
<a href="" class="out-border-left">BootStrap官网</a>
</div>
<!--底部-->
<div class="container-fluid footer-common">
<p>
<a href="javascript:void(0);" class="out-border-left">招聘首页</a>
<a href="about.html" class="out-border-left">走进源码</a>
<a href="talents.html" class="out-border-left">人才发展</a>
<a href="join_us_info.html" class="out-border-left">职位列表</a>
<a href="qa.html" class="out-border-left">Q&A</a>
</p>
<p>企业邮箱:test@test688.com </p>
<p>电话热线:4000-888-888 传真:020-3333-3333</p>
<p>公司地址:四川省成都市高新区府城大道西段399号天府新谷1号楼6F</p>
<p>源码物流版权所有 Copyright © 2018 jobs.digitalchina.ourats.com All rights reserved.蜀ICP备18080118号-1</p>
</div>
</body>
<script type="text/javascript">
function go(localPage) {
//传入参数
var title='${condition.title }';
var positiontype='${condition.positiontype }';
window.location="${pageContext.request.contextPath }/jobs/page?localPage="+localPage+"&title="+title+"&positiontype="+positiontype+"";
}
</script>
</html>