spring boot 下 dataTable|pagehelper 组合进行分页 筛选 排序
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 组合进行分页 筛选 排序的更多相关文章
- spring boot下使用logback或log4j生成符合Logstash标准的JSON格式
spring boot下使用logback或log4j生成符合Logstash标准的JSON格式 一.依赖 由于配置中使用了json格式的日志输出,所以需要引入如下依赖 "net.logst ...
- Spring Boot下Druid连接池+mybatis
目前Spring Boot中默认支持的连接池有dbcp,dbcp2, hikari三种连接池. 引言: 在Spring Boot下默认提供了若干种可用的连接池,Druid来自于阿里系的一个开源连 ...
- 转-Hive/Phoenix + Druid + JdbcTemplate 在 Spring Boot 下的整合
Hive/Phoenix + Druid + JdbcTemplate 在 Spring Boot 下的整合 http://blog.csdn.net/balabalayi/article/detai ...
- 【spring boot】10.spring boot下的单元测试
spring boot下的单元测试,思前想后还是需要单独用一章篇幅来看看. 然后在看了介绍和使用时候,我感觉并不想多去看了. 但是还是给后来人留下参考的路径: 官网说明:https://spring. ...
- 【ActiveMQ】2.spring Boot下使用ActiveMQ
在spring boot下使用ActiveMQ,需要一下几个条件 1.安装并启动了ActiveMQ,参考:http://www.cnblogs.com/sxdcgaq8080/p/7919489.ht ...
- Spring Boot下的一种导入Excel文件的代码框架
1.前言 Spring Boot下如果只是导入一个简单的Excel文件,是容易的.网上类似的文章不少,有的针对具体的实体类,代码可重用性不高:有的利用反射机制或自定义注解,开发了Excel导入工具 ...
- 【分页工具-spring boot】Mybatis PageHelper 集成Spring boot
官方文档:https://github.com/pagehelper/pagehelper-spring-boot 1.引入包,测试过以下版本兼容性还是比较好的 <!--Mybatis-Spri ...
- spring boot+mybatis+mysql增删改查分页
server: port: servlet: context-path: /springBootMybatis spring: datasource: name: test url: jdbc:mys ...
- Spring Boot下的lombok安装以及使用简介
引言:lombok是一套代码模板解决方案,将极大提升开发的效率,这里介绍给大家使用. 1. Lombok lombok是一个可以通过简单的注解的形式来帮助我们简化消除一些必须有但显得很臃肿的 Java ...
随机推荐
- MFC CMap整理
映射表类(CMap)是MFC集合类中的一个模板类,也称作为“字典”.CMap是把唯一关键码映射到值的字典收集类,使用CMap可以构造一个关键字和元素值映射的集合类.一旦在映射中插入了一个关键码值对(元 ...
- Ruby对象模型总结
参考<Ruby元编程>,元编程,即 用来编写代码的代码 . 对象由一组实例变量和一个类的引用组成 对象的方法存在与对象所属的类中,类似js中的prototype,在ruby中准确的说,应该 ...
- IT兄弟连 JavaWeb教程 EL表达式中的内置对象
EL语言定义了11个隐含对象,它们都是java.util.Map类型,网页制作者可通过它们来便捷地访问Web应用中的特定数据.表1对这11个隐含对象做了说明. 1 EL表达式中的内置对象 这11个隐 ...
- 用vector实现普通平衡树 By cellur925
其实我真的很想学习手写平衡树的==.但是感觉联赛前真没有时间了(太菜了.),于是先学一个STL代用苟,如果还能继续在\(tsoi\)苟,回来一定先学平衡树=w=. 然后因为窝对STL用的不是特别好,有 ...
- 普通组件定义渲染和render渲染组件的区别(三)
普通方式定义组件和效果: <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> ...
- Visual Studio 2015、2013、2012、2010、2008、2005各版本下载+有效密钥激活
Visual Studio是微软发布的一个集成开发工具,业内一般简称为VS,广泛应用于Windows软件开发.网站开发等,是目前十分流行的windows应用程序的集成开发工具,如果大家不了解,可以简单 ...
- 一篇文章彻底弄懂CAS实现SSO单点登录原理
1. CAS 简介 1.1. What is CAS ? CAS ( Central Authentication Service ) 是 Yale 大学发起的一个企业级的.开源的项目,旨在为 Web ...
- ACM之路
从10月我刚接触到acm竞赛,到现在2017年2.20接近4个月的时间,我才刷到200道题.在刷题的过程中,我曾遇到困难,我也从一次性就a过,但是有时候会想到放弃.不过既然已经踏进来一只脚,还不如就好 ...
- Python-2-序列及通用序列操作
序列包括字符串,列表,元祖,序列中的每个元素都有编号,其中只有元祖不能修改 通用序列操作包括索引. 切片. 相加. 相乘和成员资格检查 索引 >>> greeting = ' ...
- UVa12716:gcd等于xor(打表+类素数筛+差分约束)
紫书给的分析缺少一些证明性的东西,将我自己的OneNote笔记贴在这里.