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 ...
随机推荐
- UVALive 7327【模拟】
题意: 每次方案一个或多个子序列: 每个子序列要整除m 认为分割不同,子序列边界的不同就是不同: 1246有4个 1246 12 46 124 6 12 4 6 思路: 先从整体考虑,因为取膜适用于加 ...
- Unity3D - 动作动画忽略timeScale
http://blog.csdn.net/ynnmnm/article/details/46866347 最近在调战斗时的动画与特效,Unity3D对加/减速提供了Time.timeScale支持.但 ...
- bzoj 2406: 矩阵【二分+有源汇上下界可行流】
最大值最小,所以考虑二分 |Σaij-Σbij|<=mid,所以Σbij的上下界就是(Σaij-mid,Σaij+mid) 考虑建有上下界网络,连接(s,i,Σaik-mid,Σaik+mid) ...
- github的上传本地文档
自从使用github以来,一直都是在github网站在线上传文件到仓库中,但是有时因为网络或者电脑的原因上传失败.最重要的原因是我习惯本地编辑,完成以后再一起上传github.看过了几个教程,总结出最 ...
- Redis - Windows平台下怎么切换db并且清理数据
Redis 本身支持16个数据库(0~15),通过 数据库id 设置,默认为0.在Windows平台下可以通过启动redis-cli.exe来进入客户端,客户端默认连接数据库0,在客户端里可以输入各种 ...
- AKOJ-2037-出行方案
链接:https://oj.ahstu.cc/JudgeOnline/problem.php?id=2037 题意: 安科的夏天真是不一般的热,避免炎热,伍学长因此想为自己规划一个校园出行方案,使得从 ...
- 异步加载js文件的方法
# 异步加载js文件 - js的加载默认是同步的,因为js是单线程执行,只能完成一件再执行下一件. - 一些外部引入的js文件可以因为文件太大,在加载资源的过程中会影响dom元素的加载,影响了用户体验 ...
- ArrayList简单学习
类声明: public class ArrayList<E> extends AbstractList<E> implements List<E>, RandomA ...
- 74HC14D(6反向施密特触发器)
74HC14D:6反向施密特触发器:延迟特性,反向特性,整形特点. 施密特触发器是具有特殊功能的非门,当加在它的输入端A的电压逐渐上升到某个值时(正阈值电压),输出端Y会突然从高电平跳到低电平,而当输 ...
- prerender-spa-plugin预处理vue项目实践
由于公司想要把商城做由之前的php和前端混合开发改版为前后端分离,所以拿现在手上的vue项目来实践一下 https://github.com/chrisvfritz/prerender-spa-plu ...