• 分页&高级查询


     

    分页

    真分页

    点击到那一夜的数据,我们就使用范围查询

    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 + "]";
        }
        
        
    }
    View Code

    通过这里面的构造方法,就能直接封装为一个对象,这里面都能通过计算获得,但是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;
        }            
    View Code
    @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);
        }
    View Code

    这是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>
    View Code

     

    这是前端页面的数据反馈

     

    高级查询

     我们输入内容返回相应的数据,还要查看职位是否发布

    我们可以有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 + "]";
        }
        
        
    }
    View Code

    控制层代码

    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";
        }
    }
    View Code

    服务层的代码

    @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;
        }
    View Code

    前端数据接收

    <%@ 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>
    View Code
  • 相关阅读:
    WinForm容器内控件批量效验是否同意为空?设置是否仅仅读?设置是否可用等方法分享
    EF的CRUD
    SICP 习题 (1.41)解题总结
    陈光标挽救纽约穷人背后有何玄机?
    poj 1276 Cash Machine(多重背包)
    vue的生命周期
    vue mounted组件的使用
    babel-polyfill的几种使用方式
    可拖拽排序的vue组件
    import、export 和 export default
  • 原文地址:https://www.cnblogs.com/xiaoruirui/p/11515217.html
Copyright © 2020-2023  润新知