1)Js 需提前引用 jquery.dataTables

    $(function () {

        //提示信息  初始化设置 一般不需要改
var lang = {
"sProcessing": "处理中...",
"sLengthMenu": "每页 _MENU_ 项",
"sZeroRecords": "没有匹配结果",
"sInfo": "当前显示第 _START_ 至 _END_ 项,共 _TOTAL_ 项。",
"sInfoEmpty": "当前显示第 0 至 0 项,共 0 项",
"sInfoFiltered": "(由 _MAX_ 项结果过滤)",
"sInfoPostFix": "",
"sSearch": "搜索:",
"sUrl": "",
"sEmptyTable": "表中数据为空",
"sLoadingRecords": "载入中...",
"sInfoThousands": ",",
"oPaginate": {
"sFirst": "首页",
"sPrevious": "上页",
"sNext": "下页",
"sLast": "末页",
"sJump": "跳转"
},
"oAria": {
"sSortAscending": ": 以升序排列此列",
"sSortDescending": ": 以降序排列此列"
}
}; //重要修改 表格内容的自定义,需要根据业务定制
var table = $(".table-sort").dataTable({
language:lang, //提示信息
autoWidth: false, //禁用自动调整列宽
stripeClasses: ["odd", "even"], //为奇偶行加上样式,兼容不支持CSS伪类的场合
processing: true, //隐藏加载提示,自行处理
serverSide: true, //启用服务器端分页
searching: false, //禁用原生搜索
orderMulti: true, //启用多列排序
ordering:true,//使用排序
bStateSave:true,//记录cookie
columnDefs:[{
// "targets": 'nosort', //列的样式名
// "orderable": false //包含上样式名‘nosort’的禁止排序
'targets' : [0,2,3,4,5,6,7,8], //除第六,第七两列外,都默认不排序
'orderable' : false,
}],
order: [], //取消默认排序查询,否则复选框一列会出现小箭头
renderer: "bootstrap", //渲染样式:Bootstrap和jquery-ui
pagingType: "simple_numbers", //分页样式:simple,simple_numbers,full,full_numbers
ajax: function (data, callback, settings) { //封装请求参数
var param = {};
param.pageSize= data.length;//页面显示记录条数,在页面显示每页显示多少项的时候
param.startIndex = data.start;//开始的记录序号
param.pageIndex = (data.start / data.length);//当前页码
//自定义的参数
param.type=$("select[name='type']").val();//获取要筛选的类别
param.name=$("input[name='name']").val();//获取要筛选的名字
//获取排序的参数
console.log(data.order);
param.order=data.order;
//ajax请求数据方法
$.ajax({
type: "GET",
url: "/query",//url请求的地址
cache: false, //禁用缓存
data: param, //传入组装的参数
dataType: "json",
success: function (result) { //封装返回数据重要
var returnData = {};
//这里直接自行返回了draw计数器,应该由后台返回
returnData.draw = data.draw;
//返回数据全部记录
returnData.recordsTotal = result.totalCount;
//后台不实现过滤功能,每次查询均视作全部结果
returnData.recordsFiltered = result.totalCount;
//返回的数据列表
returnData.data = result.data; //调用DataTables提供的callback方法,代表数据已封装完成并传回DataTables进行渲染
//此时的数据需确保正确无误,异常判断应在执行此回调前自行处理完毕
callback(returnData);
}
});
},
//列表表头字段
columns: [
{ "data": "id" },
{ "data": "id" },
{ "data": "name" },
{ "data": "icon" },
{ "data": "url" },
{ "data": "addtime" },
{ "data": "sort" },
{ "data": "remarks" },
{ "data": "id" },
],
//新建列的 数据内容
"createdRow": function ( row, data, index ) {
//行渲染回调,在这里可以对该行dom元素进行任何操作
var $btn = $('<div class="btn-group text-cen">'+
'<button type="button" class="btn btn-sm btn-primary btn-edit">修改</button>'+
'<button type="button" class="btn btn-sm btn-danger btn-del">删除</button>'+
'</div>'+
'</div>');
$('td', row).eq(8).append($btn);
}
}).api();
//此处需调用api()方法,否则返回的是JQuery对象而不是DataTables的API对象 //查询按钮
$("#SelectServer").click(function(){
table.ajax.reload();
});
});

2)HTML 筛选部分

    <select name="type" class="select">
<option value="-1">全部分类</option>
<option value="0">父级</option>
<option value="1">子集</option>
</select>
   <input type="text" name="name" id="name" placeholder=" 菜单名称" style="width:250px" class="input-text">
<button name="" id="SelectServer" class="btn btn-success" type="submit"><i class="Hui-iconfont"></i> 搜目录</button>

3)后台的数据库实体及表格需要的参数对象

admin_menu 表格可以按照下列字段新建
package com.example.springboot.model;

import java.util.Date;

public class admin_menu {
public int getId() {
return id;
} public void setId(int id) {
this.id = id;
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public String getUrl() {
return url;
} public void setUrl(String url) {
this.url = url;
} public String getIcon() {
return icon;
} public void setIcon(String icon) {
this.icon = icon;
} public Date getAddtime() {
return addtime;
} public void setAddtime(Date addtime) {
this.addtime = addtime;
} public int getSort() {
return sort;
} public void setSort(int sort) {
this.sort = sort;
} public int getParentid() {
return parentid;
} public void setParentid(int parentid) {
this.parentid = parentid;
} public String getRemarks() {
return remarks;
} public void setRemarks(String remarks) {
this.remarks = remarks;
} public Boolean getIsabort() {
return isabort;
} public void setIsabort(Boolean isabort) {
this.isabort = isabort;
} private int id; private String name; private String url; private String icon; private Date addtime; private int sort; private int parentid; private String remarks; private Boolean isabort; }

package com.example.springboot.model;

import java.math.BigInteger;
import java.util.List; public class RtPageInfo {
private List Data;
private Integer PageNum;
private Integer PageSize; public List getData() {
return Data;
} public void setData(List data) {
Data = data;
} public Integer getPageNum() {
return PageNum;
} public void setPageNum(Integer pageNum) {
PageNum = pageNum;
} public Integer getPageSize() {
return PageSize;
} public void setPageSize(Integer pageSize) {
PageSize = pageSize;
} public long getTotalCount() {
return TotalCount;
} public void setTotalCount(long totalCount) {
TotalCount = totalCount;
} private long TotalCount; }

4)拼接的筛选Sql。(*^▽^*)

 //结构化sql
@SelectProvider(type = UserDaoProvider.class, method = "findUserByName")
List<admin_menu> FindAllWhere(Map<String, Object> map); class UserDaoProvider {
public String findUserByName(Map<String, Object> map) {
String sql = "SELECT * FROM admin_menu";
Integer type=Integer.parseInt(map.get("type").toString()) ;
String name=map.get("name")!=null?map.get("name").toString():null;
if(type!=-1||name!=null){
sql += " where ";
int i=1;
if(type!=-1){
sql += i!=1?"and ":"";
sql +="parentid !=0";//测试
i++;
}
if(name!=null){
sql += i!=1?"and ":"";
sql +="name LIKE '%"+name+"%'";
i++;
}
} return sql;
}
}

5)分页帮助类PageHelper的配置

package com.example.springboot.config;

import java.util.Properties;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration; import com.github.pagehelper.PageHelper; @Configuration
public class PageHelperConfig { @Bean
public PageHelper pageHelper() {
PageHelper pageHelper = new PageHelper();
Properties p = new Properties();
p.setProperty("offsetAsPageNum", "true");
p.setProperty("rowBoundsWithCount", "true");
p.setProperty("reasonable", "true");
pageHelper.setProperties(p);
return pageHelper;
}
}

6)Controller 返回需要的Json

 //查询
@RequestMapping(value = "/query", method = RequestMethod.GET)
@ResponseBody
public RtPageInfo query(
@RequestParam(required = false, name = "pageSize") Integer pageSize,
@RequestParam(required = false, name = "startIndex") Integer startIndex,
@RequestParam(required = false, name = "pageIndex") Integer pageIndex,
@RequestParam(required = false, name = "type") Integer type,
@RequestParam(required = false, name = "name") String name,
HttpServletRequest req){
//这里做查询操作
//验证排序内容
//int issort=Integer.parseInt(req.getParameter("order[0][column]")) ;
//String sortname=req.getParameter("order[0][dir]") ;
PageHelper.startPage(startIndex,pageSize,"id desc");
//正常无条件检索
//List<admin_menu> cs=admin_menuMapper.findAll();
//多条件检索 使用map K-V参数形式
Map<String,Object> map=new HashMap<String,Object>();
map.put("type",type);
map.put("name",name);
List<admin_menu> cs=admin_menuMapper.FindAllWhere(map);
PageInfo<admin_menu> page = new PageInfo<>(cs);
//返回DataTable使用
RtPageInfo pageInfo = new RtPageInfo();
pageInfo.setData(page.getList());//这里是数据内容 List
pageInfo.setPageNum(startIndex/pageSize);//Integer
pageInfo.setPageSize(pageSize);//pageSize
pageInfo.setTotalCount(page.getTotal());//BigInteger
return pageInfo ;
}

7)pom.xml 的引用

    <dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version>4.1.6</version>
</dependency>

8)数据库结构 随便建的

9)完成结果

10)难点及解决,截图位置为重点

1)分页 :结合pagehelper,前端自定义传递参数,使用ajax传递给后台,后台完成接收,处理分页逻辑 很轻松就能完成

2 ) 检索 :点击按钮,执行ajax的刷新操作,刷新过程中 获取文本框内容,传递自定义参数  后台接收即可

3)排序:启用排序,标记排序列,自定义参数中传递参数,后台获取  并操作逻辑

spring boot 下 dataTable|pagehelper 组合进行分页 筛选 排序的更多相关文章

  1. spring boot下使用logback或log4j生成符合Logstash标准的JSON格式

    spring boot下使用logback或log4j生成符合Logstash标准的JSON格式 一.依赖 由于配置中使用了json格式的日志输出,所以需要引入如下依赖 "net.logst ...

  2. Spring Boot下Druid连接池+mybatis

      目前Spring Boot中默认支持的连接池有dbcp,dbcp2, hikari三种连接池.  引言: 在Spring Boot下默认提供了若干种可用的连接池,Druid来自于阿里系的一个开源连 ...

  3. 转-Hive/Phoenix + Druid + JdbcTemplate 在 Spring Boot 下的整合

    Hive/Phoenix + Druid + JdbcTemplate 在 Spring Boot 下的整合 http://blog.csdn.net/balabalayi/article/detai ...

  4. 【spring boot】10.spring boot下的单元测试

    spring boot下的单元测试,思前想后还是需要单独用一章篇幅来看看. 然后在看了介绍和使用时候,我感觉并不想多去看了. 但是还是给后来人留下参考的路径: 官网说明:https://spring. ...

  5. 【ActiveMQ】2.spring Boot下使用ActiveMQ

    在spring boot下使用ActiveMQ,需要一下几个条件 1.安装并启动了ActiveMQ,参考:http://www.cnblogs.com/sxdcgaq8080/p/7919489.ht ...

  6. Spring Boot下的一种导入Excel文件的代码框架

    1.前言 ​ Spring Boot下如果只是导入一个简单的Excel文件,是容易的.网上类似的文章不少,有的针对具体的实体类,代码可重用性不高:有的利用反射机制或自定义注解,开发了Excel导入工具 ...

  7. 【分页工具-spring boot】Mybatis PageHelper 集成Spring boot

    官方文档:https://github.com/pagehelper/pagehelper-spring-boot 1.引入包,测试过以下版本兼容性还是比较好的 <!--Mybatis-Spri ...

  8. spring boot+mybatis+mysql增删改查分页

    server: port: servlet: context-path: /springBootMybatis spring: datasource: name: test url: jdbc:mys ...

  9. Spring Boot下的lombok安装以及使用简介

    引言:lombok是一套代码模板解决方案,将极大提升开发的效率,这里介绍给大家使用. 1. Lombok lombok是一个可以通过简单的注解的形式来帮助我们简化消除一些必须有但显得很臃肿的 Java ...

随机推荐

  1. Unity中HideInInspector和SerializeField

    http://blog.sina.com.cn/s/blog_697b1b8c0102uxvn.html Unity会自动为Public变量做序列化,序列化的意思是说再次读取Unity时序列化的变量是 ...

  2. Unity3D之如何将包大小减少到极致

    http://www.luzexi.com Unity3D之如何将包大小减少到极致,图片是游戏app里最最占空间的资源,所以请各位还没有理解u3d对图片文件存储方式理解的请看<unity3d-t ...

  3. vmware vSAN 入门

    参考:https://docs.vmware.com/cn/VMware-vSphere/6.5/com.vmware.vsphere.virtualsan.doc/GUID-18F531E9-FF0 ...

  4. canvas常用画法整理

    代码Canvas.htm <!DOCTYPE html> <html lang="en"> <head> <title>canvas ...

  5. 当前View的坐标相对其他View的位置坐标

    // 将rect由rect所在视图转换到目标视图view中,返回在目标视图view中的rect - (CGRect)convertRect:(CGRect)rect toView:(UIView *) ...

  6. DRF教程4-视图集和路由类

    rest框架包括一个处理viewset的抽象,允许开发人员集中精力处理api交互和建模,url构造都根据常见方式自动处理. ViewSet类 几乎和VIew类一样,不过它提供read,update这样 ...

  7. Linux —— 压缩命令

    压缩与解压命令 .zip格式 压缩文件: zip 压缩文件名 原文件名 (压缩目录添加 -r) 解压缩文件/目录: unzip .zip压缩包 .gz格式 压缩文件: gzip 原文件名称 压缩文件为 ...

  8. 接口测试02 - 无法绕过的json解析

    概述: 先瞧一下什么是json.JSON(JavaScript Object Notation,JS对象标记)是一种轻量级的数据交换格式. 它基于ECMAScript(w3c定制的js规范)的一个子集 ...

  9. nodejs Async 使用方法(解决多层回调嵌套)

    由于nodejs是异步处理的,有时我们想同步从mysql里取出数据,最后在处理逻辑 就需要用到此扩展: 此扩展可以避免多层回调: 安装方法: npm install async 使用方法: 1.par ...

  10. cucumber 背景和场景的区别

    背景是公用的,每个场景都会执行,相当于前提条件: 场景是一个单独的case 别人的cucumber学习总结: 链接:http://ruby-china.org/topics/7119