SSS项目专题(六):带条件的分页查询

1.需求分析

在这里插入图片描述

根据查询条件查询,并且能实现查询条件回显、翻页、跳转等功能。

2.分页查询

①前端请求

将查询条件用form表单套起来 并给表单赋予id 方便之后表单提交操作

<form action="${pageContext.request.contextPath}/stu/list/1/${stu.pageSize}" method="post" id="f1" >
<div class="layui-container">
  
     <input type="text" id="no" name="name" value="${name}" class="layui-input" placeholder="学生姓名">
     <select class="layui-input" name="class_id" id="class_id">
          <option value="-1">--请选择班级--</option>
     </select>
<button class="layui-btn" type="submit"><i class="layui-icon layui-icon-search">搜索</i></button>
</div>
</form>

翻页等功能的实现

<script>
function gopage1(pageIndex) {       $("#f1").prop("action","${pageContext.request.contextPath}/stu/list/"+pageIndex+"/"+${stu.pageSize});
        $("#f1").submit();
}
</script>
//翻页跳转需要获取表单的数据,因此需要提交表单 
<a href="javascript:gopage1(1);"  class="layui-laypage-prev " data-page="0">

②Service层的实现

查询数据总数

@Override
public int getTotalCount(String name,Integer class_id) {
    //接口 匿名内部类 专门负责封装查询条件
    Specification specification=new Specification() {
        @Override
        public Predicate toPredicate(Root root, CriteriaQuery criteriaQuery, CriteriaBuilder cb) {
            Predicate p1=cb.equal(root.get("del"),0);
            Predicate p = cb.and(p1);
            if(name!=null&&!"".equals(name)){
                Predicate p2 = cb.like(root.get("name"), "%"+name+"%"); //模糊查询
                p=cb.and(p2,p);
            }
            if(class_id!=null&&class_id!=-1) {
                Predicate p3 = cb.equal(root.get("c").get("id"), class_id); //下拉框等值判断
                p=cb.and(p3,p);
            }
            return p;
        }
    };
    return Integer.parseInt(sd.count(specification)+"");
}

根据条件查询数据

@Override
public List<Student> getStuByPage(int pageIndex, int pageSize,String name,Integer class_id) {
    //接口 匿名内部类 专门负责封装查询条件
    Specification specification=new Specification() {
        @Override
        public Predicate toPredicate(Root root, CriteriaQuery criteriaQuery, CriteriaBuilder cb) {
            Predicate p1=cb.equal(root.get("del"),0);
            Predicate p = cb.and(p1);
            if(name!=null&&!"".equals(name)){
                Predicate p2 = cb.like(root.get("name"), "%"+name+"%"); //模糊查询
                p=cb.and(p2,p);
            }
            if(class_id!=null&&class_id!=-1) {
                Predicate p3 = cb.equal(root.get("c").get("id"), class_id); //下拉框等值判断
                p=cb.and(p3,p);
            }
            return p;
        }
    };

    //排序规则
    Sort.Order order1=new Sort.Order(Sort.Direction.ASC, "id");  // 按id降序
    Sort sort = new Sort(order1); //Sort封装了排序规则

    //分页条件对象
    Pageable pageable=new PageRequest(pageIndex-1,pageSize,sort);
    Page<Student> page= sd.findAll(specification, pageable);

    //每页数据
    List<Student> list = page.getContent();
    return list;
}

③Controller控制层

/**
 * 分页查询
 */
@RequestMapping("/list/{pageIndex}/{pageSize}")
public String studentlist(@PathVariable("pageIndex") int pageIndex, @PathVariable("pageSize") int pageSize,String name,Integer class_id, Model model){
    System.out.println(name+"-------------"+class_id);
    int totalCount = ss.getTotalCount(name,class_id);
    List<Student> list = ss.getStuByPage(pageIndex,pageSize,name,class_id);
    PageUtils<Student> page= new PageUtils<>(pageIndex,pageSize,list,totalCount);
    model.addAttribute("stu",page);
    model.addAttribute("name",name); //回显条件
    model.addAttribute("class_id",class_id);//回显条件
    return "studentList";
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值