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. C++11 并发编程基础(一):并发、并行与C++多线程

    正文 C++11标准在标准库中为多线程提供了组件,这意味着使用C++编写与平台无关的多线程程序成为可能,而C++程序的可移植性也得到了有力的保证.另外,并发编程可提高应用的性能,这对对性能锱铢必较的C ...

  2. unity关于StartCoroutine的简单线程使用

    StartCoroutine在unity3d的帮助中叫做协程,意思就是启动一个辅助的线程. 在C#中直接有Thread这个线程,但是在unity中有些元素是不能操作的.这个时候可以使用协程来完成. 使 ...

  3. Unity(2) 脚本简单操作

    生命周期(按顺序排列) Awake():脚本唤醒,系统执行的第一个方法,在脚本声明周期内只执行一次,初始化一般可以在这里 Start():Awake之后,Update之前,只执行一次,一般在awake ...

  4. CTP 下单返回错误: 没有报单权限 和字段错误需要注意的问题

    没有报单权限一般被认为期货公司没有开权限, 但是更多的问题是没有填写 BrokerId, InvestorId 下单字段错误注意一个容易忽略的地方: a. order 应该全部设为0, b. orde ...

  5. web框架原理,http 协议

    目录 web框架原理 web框架是什么东西 执行代码用浏览器访问一下 输出结果 http 协议 http 协议简介 http 协议概述 http 工作原理 http请求方法 http 状态码 url介 ...

  6. linux命令行挂载NTFS文件系统的移动硬盘

    环境 ubuntu 12.04 桌面版 由于我的ubuntu 是安装在vmware 上,如果接入移动硬盘后,它没有办法自动识别ntfs 格式的文件系统,导致mount 盘失败 从网上找到一个方法 首先 ...

  7. C#递归得到特定文件夹下问件

    List<String> listFile = new List<String>(); public void director(string path) { //绑定到指定的 ...

  8. C 语言实例 - 字符串翻转

    C 语言实例 - 字符串翻转 C 语言实例 C 语言实例 使用递归来翻转字符串. 实例 - 字符串翻转 #include <stdio.h> void reverseSentence(); ...

  9. [洛谷P2186] 小Z的栈函数

    题目链接: 传送门 题目分析: 大模拟,先得存操作,然后再处理每个数-- 有一个小优化,在处理操作的时候顺便判一下最后栈里是不是有且仅有一个数,但A完了才想起来,所以就算了-- 总之就是个模拟题--没 ...

  10. Influxdb 时序数据库 windows 安装

    Influxdb 是一款比较火爆的时序数据库,本文介绍如何在 windows 平台下安装. 1.场景: windows 平台的 influxdb 似乎只支持单机非windows 服务的安装方式 适用于 ...