mybatis(pagehelper) dataTables实现分页功能

mybatis(pagehelper) dataTables实现分页功能

网上有一些资料,感觉都不完整,这里整理一下,方便使用

心急的直接看代码:GitHub – chenjiangtao/mybatis-pagehelper-datatables

  1. 包引入

PageHelper引入

    <!-- mybatis 分页插件 -->
    <dependency>
        <groupId>com.github.pagehelper</groupId>
        <artifactId>pagehelper</artifactId>
        <version>4.1.6</version>
    </dependency>

DataTables引入(包含css 和js两个部分)

    <!— DataTables CSS -->
        <link href="/vendor/datatables-plugins/dataTables.bootstrap.css" rel="stylesheet">
        <!-- DataTables Responsive CSS -->
        <link href="/vendor/datatables-responsive/dataTables.responsive.css" rel="stylesheet">
    <!-- DataTables JavaScript -->
        <script src="/vendor/datatables/js/jquery.dataTables.min.js"></script>
        <script src="/vendor/datatables-plugins/ dataTables.bootstrap.min.js"></script>
        <script src="/vendor/datatables-responsive/dataTables.responsive.js"></script>

参考:
https://github.com/pagehelper/Mybatis-PageHelper
https://datatables.net/examples/server_side/index.html
2. 使用说明
Server side部分(java spring)
建一个类DataTablePageUtil.java

package org.cjt;
public class DataTablePageUtil<T> {

/*------------------DT自动请求的参数(Sent parameters) begin--------------------*/
/* * 绘制计数器。这个是用来确保Ajax从服务器返回的是对应的(Ajax是异步的,因此返回的顺序是不确定的)。 要求在服务器接收到此参数后再返回 */
private int draw; // 第几次请求
/* * 第一条数据的起始位置,比如0代表第一条数据 */
private int start = 0;// 起止位置
/* * 告诉服务器每页显示的条数,这个数字会等于返回的 data集合的记录数,可能会大于因为服务器可能没有那么多数据。 * 这个也可能是-1,代表需要返回全部数据(尽管这个和服务器处理的理念有点违背) */
private int length = 100; // 数据长度
/* * 全局的搜索条件,条件会应用到每一列( searchable需要设置为 true ) */
private String search;
/* * 如果为 true代表全局搜索的值是作为正则表达式处理,为 false则不是。 * 注意:通常在服务器模式下对于大数据不执行这样的正则表达式,但这都是自己决定的 */
private boolean is_search;
/* * 告诉后台那些列是需要排序的。 i是一个数组索引,对应的是 columns配置的数组,从0开始 */
private int[] order;
/* * 告诉后台列排序的方式, desc 降序 asc升序 */
private String order_dir;
/* * columns 绑定的数据源,由 columns.dataOption 定义。 */
private String columns_data;
/* * columns 的名字,由 columns.nameOption 定义。 */
private String columns_name;
/* * 标记列是否能被搜索,为true代表可以,否则不可以,这个是由 columns.searchableOption 控制 */
private String columns_searchable;
/* * 标记列是否能排序,为 true代表可以,否则不可以,这个是由 columns.orderableOption 控制 */
private boolean is_orderable;
/* * 标记具体列的搜索条件 */
private String columns_search_value;
/* * 特定列的搜索条件是否视为正则表达式, 如果为 true代表搜索的值是作为正则表达式处理,为 false则不是。 * 注意:通常在服务器模式下对于大数据不执行这样的正则表达式,但这都是自己决定的 */
private boolean is_search_regex;
/*------------------DT自动请求的参数(Sent parameters) end--------------------*/
/*------------------服务器需要返回的数据(Returned data) begin--------------------*/
/* * 必要。上面提到了,Datatables发送的draw是多少那么服务器就返回多少。 * 这里注意,作者出于安全的考虑,强烈要求把这个转换为整形,即数字后再返回,而不是纯粹的接受然后返回,这是 为了防止跨站脚本(XSS)攻击。 */
// private int draw;
/* * 必要。即没有过滤的记录数(数据库里总共记录数) */
private int recordsTotal;
/* * 必要。过滤后的记录数(如果有接收到前台的过滤条件,则返回的是过滤后的记录数) */
private int recordsFiltered;
/* * 必要。表中中需要显示的数据。这是一个对象数组,也可以只是数组, 区别在于 纯数组前台就不需要用 columns绑定数据,会自动按照顺序去显示 * ,而对象数组则需要使用 columns绑定数据才能正常显示。 注意这个 data的名称可以由 ajaxOption 的 * ajax.dataSrcOption 控制 */
private List<T> data;
/* * 可选。你可以定义一个错误来描述服务器出了问题后的友好提示 */
private String error;
/*-------------可选参数-----------------*/
/* * 自动绑定到 tr节点上 */
private String dt_rowId;
/* * 自动把这个类名添加到 tr */
private String dt_rowClass;
/* * 使用 jQuery.data() 方法把数据绑定到row中,方便之后用来检索(比如加入一个点击事件) */
private Object dt_rowData;
/* * 自动绑定数据到 tr上,使用 jQuery.attr() 方法,对象的键用作属性,值用作属性的值。 注意这个 需要 Datatables * 1.10.5+的版本才支持 */
private Object dt_rowAttr;
/*-------------可选参数-----------------*/
/*------------------服务器需要返回的数据(Returned data) end--------------------*/
/* * 当前页码 */
private int page_num = 1;
/* * 每页数据 */
private int page_size = 100;
public DataTablePageUtil() {
}
public DataTablePageUtil(HttpServletRequest request) {
//开始的数据行数
String start = request.getParameter("start");
//每页的数据数
String length = request.getParameter("length");
//DT传递的draw:
String draw = request.getParameter("draw");
this.setStart(Integer.parseInt(start));
this.setLength(Integer.parseInt(length));
this.setDraw(Integer.parseInt(draw));
//计算页码
this.page_num = (Integer.parseInt(start) / Integer.parseInt(length)) + 1;
}
/** * getter setter .... */
}

建一个service Service.java

        /** * 获取所有的数据,前面得有PageHelper兜着 * @param userId * @return */
public List<SpMsg> getByUserId(Integer userId) {
SpMsgExample example = new SpMsgExample();
example.createCriteria().andUserIdEqualTo(userId);
return mapper.selectByExample(example);
}

页面部分(jquery-dateFormat jquery,datatables)
独立的js文件 mydatatable.js

    $(document).ready(function () {

<!-- Page-Level Demo Scripts - Tables - Use for reference -->
$('#dataTables-smsSendOrder').DataTable({
processing: true,
serverSide: true,
lengthChange: false,//是否允许用户改变表格每页显示的记录数
ordering: false,//是否允许用户排序
paging: true,//是否分页
pagingType: "full_numbers",//除首页、上一页、下一页、末页四个按钮还有页数按钮
/* scrollX: true,//允许水平滚动 scrollY: "200px", scrollCollapse: true, */
searching: false,//是否开始本地搜索
stateSave: false,//刷新时是否保存状态
autoWidth: true,//自动计算宽度
//deferRender : true,//延迟渲染
language: {
"lengthMenu": "每页 _MENU_ 条记录",
"zeroRecords": " ",
"info": "当前 _START_ 条到 _END_ 条 共 _TOTAL_ 条",
"infoEmpty": "无记录",
"infoFiltered": "(从 _MAX_ 条记录过滤)",
// "search": "用户",
// "processing": "载入中",
"paginate": {
"first": "首页",
"previous": "上一页",
"next": "下一页",
"last": "尾页"
}
},
ajax: {
url: '/admin/module/smsOrderPage',
type: 'POST'
},
columns: [
{data: "id"},
{data: "mobile"},
{data: "content"},
{data: "sendChannel", defaultContent: ""},
{
"data": "createTime",
render: function (data) {

return $.format.date(new Date(data), "yyyy-MM-dd HH:mm:ss");
}
},
{
data: "sendStatus", render: function (data) {

switch (data) {
case '0':
return '初始';
case '1':
return '待发送';
case '2':
return '发送中';
case '3':
return '成功';
case '4':
return '失败';
case '9':
return '未知';
default:
return '初始';
}
}
},
{data: "sendReturnMsg", defaultContent: ""}
]
});
});

页面引用mydatatables.jsp

    <head>
<!-- DataTables CSS -->
<link href="/vendor/datatables-plugins/dataTables.bootstrap.css" rel="stylesheet">
<!-- DataTables Responsive CSS -->
<link href="/vendor/datatables-responsive/dataTables.responsive.css" rel="stylesheet">
</head>
<body>
<!— /.panel-heading -->
<div class="panel-body">
<table width="100%" class="table table-striped table-bordered table-hover" id="dataTables-smsSendOrder">
<thead>
<tr>
<th>编号</th>
<th>号码</th>
<th>内容</th>
<th>发送通道</th>
<th>创建时间</th>
<th>发送状态</th>
<th>返回信息</th>
</tr>
</thead>
</table>
</div>
</body>
<!-- /.panel-body -->
<!-- DataTables JavaScript -->
<script src="/vendor/datatables/js/jquery.dataTables.min.js"></script>
<script src="/vendor/datatables-plugins/dataTables.bootstrap.min.js"></script>
<script src="/vendor/datatables-responsive/dataTables.responsive.js"></script>
<script src="/dist/js/smsorder.js"></script>

以上,分页功能基本完整了。
参考:
http://blog.csdn.net/lvbang_lzt/article/details/54375091
http://www.cnblogs.com/miskis/p/5512138.html

注意:
如果页面数据显示不准确参考:http://blog.csdn.net/evane1890/article/details/63686578

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/100423.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • Python-matplotlib画图(莫烦笔记)

    https://www.zhihu.com/collection/260736383&lt;此处就不自己写了,看了遍,照着写了一边,作者写的不错。不过有些有些偷懒,我只做了常见的功能&gt;作者:触摸壹缕阳光链接:https://zhuanlan.zhihu.com/p/33270402来源:知乎著作权归作者所有,转载请联系作者获得授权。1.前言Matplotlib是一个python的2D绘图库…

  • Isona-0.0.1发布,spring4all社区打造的微服务管理工具,欢迎吐槽与共同完善「建议收藏」

    Isona-0.0.1发布,spring4all社区打造的微服务管理工具,欢迎吐槽与共同完善

  • js取数组截取

    js取数组截取splice()会删除选定的数组,slice()只会进行选定,pop选定最后一个元素删除并返回最后一个元素的值,length函数判断数组的长度,使用slice选取单个值的时候记得返回的是一个数组类型。constarr=[1,2,7,2,6,0,3,1,5,7,8,9,45,12,34,0,56,12,2]//slice()方法constsliceArr…

  • PropertyDescriptor属性描述类学习

    PropertyDescriptor属性描述类学习1构造方法通过调用getFoo和setFoo存取方法,为符合标准Java约定的属性构造一个PropertyDescriptor publicPropertyDescriptor(StringpropertyName, Class&lt;?&gt;beanClass) 该构造函数使用简单属性的名称,以及读取和写入属性的方法名称publicPropertyDes…

  • Django(23)Django限制请求装饰器

    Django(23)Django限制请求装饰器前言有时候,我们想要限制访问的请求方法,比如我们希望用户只能通过get方式请求,post不允许,那么我们可以采用装饰器的方式,django已经为我们提供了内置的装饰器限制请求装饰器Django内

  • 2020,最新手机号码手机验证正则表达式,持续更新

    2020,最新手机号码手机验证正则表达式,持续更新最近在跟一个别人写好上线的项目,今天出了一个bug,部分正常的手机号验证格式不通,查看了代码发现正则表达式有较大的错误,如图:存在的问题:1.存在逗号2.不够全面,部分正常的手机号验证不通过所以决定自己写,百度一下手机号的格式,下面应该是比较全面,所以就自己根据下面的写验证的正则表达式,如有小伙伴发现下图仍有遗漏请在评论指出,我看到会马上更新最后写出来的正则表达式:Patternp=Pattern.compile(“^1(3([1-35-9]\\d|4[1-..

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号