一、简介

通过Jqury的Datatable插件,构造数据列表,并且增加或者隐藏相应的列,已达到数据显示要求。同时, jQuery Datatable 强大的功能支持:排序,分页,搜索等。

二、前台分页

1、Datatable参数讲解

 <div class="container-fluid margin-md">
<table id="firm-list" class="table table-responsive table-hover table-bordered">
<thead>
<tr>
<th>订单号</th>
<th>校区</th>
<th>下单时间</th>
<th>发单人</th>
<th>带客</th>
<th>订单状态</th>
<th>订单类型</th>
<th>金额</th>
<th>操作</th>
</tr>
</thead>
<tbody></tbody>
</table>
</div>
<script>
$(function () {
var table = $("#firm-list").DataTable({
"bStateSave": true,
"order": [[ 1, 'asc' ]],
"autoWidth": true, //表格自适应
"processing": true, //显示加载信息
"language": {
"decimal": "",
"emptyTable": "没有数据",
"info": "当前为 _START_ 至 _END_ 号记录 , 一共 _TOTAL_ 条记录",
"infoEmpty": "当前为 0 至 0 号记录 , 一共 0 条记录",
"infoFiltered": "(找到 _MAX_ 条记录)",
"infoPostFix": "",
"thousands": ",",
"lengthMenu": "显示 _MENU_ 条记录",
"loadingRecords": "加载中...",
"processing": "加载中...",
"search": "查询:",
"zeroRecords": "没有找到匹配记录",
"paginate": {
"first": "第一页",
"last": "最后一页",
"next": "下一页",
"previous": "上一页"
}
},
       <!--ajax请求,不多解析-->
"ajax": function (data, fnCallback) {
$.ajax({
"url": basePath + "/Admin/loadFirms.do",
"dataType": 'json',
"type": "POST",
"success": function (result) {
fnCallback(result);
},
"error": function () {
}
});
},
       <!--每一列跟后台传递过来的json数据json.data中的数据字段名要一一对应。data就是字段名、bSortable代表该字段要不要排序,render用于对数据进行处理。-->
"columns": [
{ data: "firmId" ,"bSortable": false},//data就是字段名、bSortable代表该字段要不要排序
{
"data": "order.acceptAddCode" ,
"render": function(data, type, full) {
var campusCode=data.substring(0,2);
if(campusCode=='11'){
return "南湖校区"
}else if (campusCode=='12'){
return "林园校区"
}
}
},
{
"data":'giveTime',
"render": function(data, type, full) {
var date=new Date();
date.setTime(data.time)
return format(date, "yyyy-MM-dd hh:mm:ss");
}
},
{ data: "user.name","bSortable": false },
{ data: "order.receiver","bSortable": false },
{
"data": 'orderState',
"render": function (data, type, full) {
switch (data){
case 0:
return "未接单";
break;
case 1:
return "已接单";
break;
case 2:
return "已完成"
break;
case 3:
return "已取消";
break;
case 4:
return "待付款";
break;
}
}
},
{
data: 'order.staId',
"render": function (data, type, full) {
switch (data){
case 30:
return "快递";
break;
case 31:
return "外卖";
break;
}
}
},
{
"data": 'orderMoney',
"render": function (data, type, full) {
return data*0.01;
}
}
],
"columnDefs": [
{
"targets": [8],
"data": "firmId",
"render": function(data, type, full) {
return "<a href='<%=basePath%>Admin/lookupFirmDetail?firmId=" + data + "'>查看详情</a>";
}
}
]
});
table.on( 'order.dt search.dt', function () {
table.column(0, {search:'applied', order:'applied'}).nodes().each( function (cell, i) {
cell.innerHTML = i+1;
} );
} ).draw();
}); function format(date, fmt) {

var o = {

"M+": date.getMonth() + 1, //月份

"d+": date.getDate(), //日

"h+": date.getHours(), //小时

"m+": date.getMinutes(), //分

"s+": date.getSeconds() //秒

};

if (/(y+)/.test(fmt))

fmt = fmt.replace(RegExp.$1, (date.getFullYear() + "").substr(4 - RegExp.$1.length));

for (var k in o)

if (new RegExp("(" + k + ")").test(fmt))

fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length)));

return fmt;

}

</script> 

2、根据Datatable需要的Json数据格式,提供DatatableVO实体类。

 public class DataTableResultVO<T>{
private int draw;//请求的次数
private int recordsTotal;//返回的记录总数
private int recordsFiltered; //过滤后的数据总数
private List<T> data; // 显示到页面的数据 public DataTableResultVO() {} public int getDraw() {
return draw;
} public void setDraw(int draw) {
this.draw = draw;
} public int getRecordsTotal() {
return recordsTotal;
} public void setRecordsTotal(int recordsTotal) {
this.recordsTotal = recordsTotal;
} public int getRecordsFiltered() {
return recordsFiltered;
} public void setRecordsFiltered(int recordsFiltered) {
this.recordsFiltered = recordsFiltered;
} public List<T> getData() {
return data;
} public void setData(List<T> data) {
this.data = data;
} @Override
public String toString() {
return "DataTableResultVO{" +
"draw=" + draw +
", recordsTotal=" + recordsTotal +
", recordsFiltered=" + recordsFiltered +
", data=" + data +
'}';
}
}

3、springmvc构造Datable需要的json数据格式

    @RequestMapping(value = "/Admin/loadFirms.do",method = {RequestMethod.POST})
@ResponseBody
public String loadFirms(HttpServletRequest request, HttpServletResponse response){
try {
List<Firm> firms=firmService.loadFirmsToAdmin();
DataTableResultVO<Firm> result=new DataTableResultVO<>();
result.setData(firms);//data参数。
result.setRecordsTotal(firms.size());//数据的条数
result.setRecordsFiltered(firms.size());//过滤后数据的条数
return JSONObject.fromObject(result).toString();
}catch (Exception e){
e.printStackTrace();
}
return null;
}

4、利用mybatis实现Service层与Dao层

//FirmServiceImpl、获取数据列表
public List<Firm> loadFirmsToAdmin()throws Exception{
return firmDao.selectFirmsByTableParams();
} //FirmDao接口

public Firm selectFirmDetailToAdmin(String firmId); //FirmDaoxml

<?xml version="1.0" encoding="UTF-8" standalone="no"?>

<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD iBatis Mapper 3.0 //EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<mapper namespace="com.daiba.firm.dao.FirmDao">

<!---管理员页面通过分页获取订单列表-->

<select id="selectFirmsByTableParams" resultMap="firmResultMap">

SELECT f.firm_id,o.accept_add_code,f.use_id,u.name,o.receiver,f.order_state,o.sta_id,f.give_time,f.order_money

FROM firm f,orders o,user u

WHERE f.ord_id = o.order_id

AND f.use_id=u.user_id

ORDER BY f.order_state ASC,f.give_time DESC

</select> <!--mybatis常识:使用resultMap的时候记得要在mybatis.xml里面添加实体依赖注入typealis-->

<resultMap id="firmResultMap" type="Firm">

<id property="firmId" column="firm_id" jdbcType="VARCHAR"/>

<result property="briId" column="bri_id" jdbcType="INTEGER"/>

<result property="address" column="address" jdbcType="VARCHAR"/>

<result property="askTime" column="ask_time"/>

<result property="remark" column="remark" jdbcType="VARCHAR"/>

<result property="orderMoney" column="order_money" jdbcType="INTEGER"/>

<result property="giveTime" column="give_time"/>

<result property="acceptTime" column="accept_time"/>

<result property="finishTime" column="finish_time"/>

<result property="cancleTime" column="cancle_time"/>

<result property="orderState" column="order_state" jdbcType="INTEGER"/>

<result property="isApplyCancel" column="is_apply_cancel" jdbcType="INTEGER"/>

<association property="user" javaType="User">

<id property="userId" column="use_id" jdbcType="INTEGER"/>

<result property="name" column="name" jdbcType="VARCHAR"/>

<result property="portrait" column="portrait" jdbcType="VARCHAR"/>

<result property="phoneNum" column="phone_num" jdbcType="VARCHAR"/>

<result property="password" column="password" jdbcType="VARCHAR"/>

<result property="registerTime" column="register_time"/>

<result property="role" column="role" jdbcType="VARCHAR"/>

<result property="recetlyLoginTime" column="recetly_login_time"/>

<result property="orderNum" column="order_num" jdbcType="INTEGER"/>

<result property="spending" column="spending" jdbcType="DOUBLE"/>

<result property="sex" column="sex" jdbcType="INTEGER"/>

<result property="openId" column="open_id" jdbcType="VARCHAR"/>

</association>

<association property="order" javaType="Order">

<id property="orderId" column="ord_id" jdbcType="VARCHAR"/>

<result property="staId" column="sta_id" jdbcType="INTEGER"/>

<result property="acceptAddCode" column="accept_add_code" jdbcType="VARCHAR"/>

<result property="company" column="company" jdbcType="VARCHAR"/>

<result property="receiver" column="receiver" jdbcType="VARCHAR"/>

<result property="tokenNum" column="token_num" jdbcType="VARCHAR"/>

<result property="reservedPhone" column="reserved_phone" jdbcType="VARCHAR"/>

</association>

</resultMap>

</mapper>

三、后台分页

原理跟前台类似,只是数据分页、排序、查询在后台完成。

1、ajax请求重要参数(start、length、search[value])

  start: 其实记录位置

  length: 页面显示数量

  order[0][column]: 因为是二维的表格,因此只有一维需要排序,所以 order 的下标未0. 该属性表示第几列需要排序。

  order[0][dir]: 排序方式 ASC | DESC

  search[value]: search 输入框中的值

2、Springmvc获取参数

    int pageSize = 10;
  int startRecord = 0;
//分页的数据条数
String size = request.getParameter("length");
if (!"".equals(size) && size != null) {
pageSize = Integer.parseInt(size);
}
//分页的当前位置
String currentRecord = request.getParameter("start");
if (!"".equals(currentRecord) && currentRecord != null) {
startRecord = Integer.parseInt(currentRecord);
}
//用于排序
String sortOrder = request.getParameter("order[0][column]");
String sortDir = request.getParameter("order[0][dir]");
System.out.println("sortOrder: " + sortOrder);
System.out.println("sortDir: " + sortDir); // 用于搜索
String searchValue = request.getParameter("search[value]");

3、核心思想:组装sql,例如select * from firm where  1=1 order by sortOrder sortDir limit start,length。

4、dao层实现,利用servlet+jdbc对后台分页进行详细说明。

参考:http://www.tuicool.com/articles/NBBnum

参考:http://blog.csdn.net/tomcat_2014/article/details/50177645

四、致敬语

刚开始通过写博客来做学习笔记,若有什么不足请多多指正,谢谢!

Datatable+Springmvc+mybatis(分页+排序+搜索)_Jquery的更多相关文章

  1. springmvc mybatis 分页插件 pagehelper

    springmvc mybatis 分页插件 pagehelper 下载地址:pagehelper 4.2.1 , jsqlparser 0.9.5 https://github.com/pagehe ...

  2. springMVC + mybatis 搜索 分页等

    mybatis-3.0.5spring-core-3.2.0.RELEASE等MyBatis3+Spring3当前Spring版本(3.0.5)中未提供对MyBatis3的支持使用第三方jar包进行整 ...

  3. Mybatis+SpringMVC实现分页查询(附源码)

    Maven+Mybatis+Spring+SpringMVC实现分页查询(附源码) 一.项目搭建 关于项目搭建,小宝鸽以前写过一篇Spirng+SpringMVC+Maven+Mybatis+MySQ ...

  4. Maven+Mybatis+Spring+SpringMVC实现分页查询

    转载:http://www.cnblogs.com/zhangtan/p/5846955.html 一.项目搭建 关于项目搭建,小宝鸽以前写过一篇Spirng+SpringMVC+Maven+Myba ...

  5. Maven+Mybatis+Spring+SpringMVC实现分页查询(附源代码)

    以下小宝鸽将分享一篇Mybatis分页功能的博文,以下将给出具体的步骤.跟着博主的节奏肯定能实现.另外最后还会附上整个project的源代码.假设是没有使用过maven的猿友可自行下载相关的jar包就 ...

  6. 用 eclipse 创建一个简单的 meaven spring springMvc mybatis 项目

    下面是整体步骤: 1: 先创建一个Maven 项目: 选择跳过骨架: 因为要搭建的是 web 项目  所以这个地方选择 war 包; 点击完成 这样就完成 Maven项目的搭建: 接下俩 先把 Mav ...

  7. Mybatis分页和Spring的集成

    写了一个Mybatis分页控件,在这记录一下使用方式. 在Maven中加入依赖: ? 1 2 3 4 5 6 7 8 9 <dependencies>   ...     <depe ...

  8. SpringMVC +mybatis+spring 结合easyui用法及常见问题总结

    SpringMVC +mybatis+spring 结合easyui用法及常见问题总结 1.FormatString的用法. 2.用postAjaxFillGrid实现dataGrid 把form表单 ...

  9. Spring+SpringMVC+MyBatis+easyUI整合基础篇(八)mysql中文查询bug修复

    写在前面的话 在测试搜索时出现的问题,mysql通过中文查询条件搜索不出数据,但是英文和数字可以搜索到记录,中文无返回记录.本文就是写一下发现问题的过程及解决方法.此bug在第一个项目中点这里还存在, ...

随机推荐

  1. git安装及命令使用和github网站

    最近参与别人的github项目时,学习了git的使用,首先需要在https://github.com/网站上注册账号和邮箱,然后fork一个开源项目,然后下载目前Windows下最新版本的git,下载 ...

  2. 与资源库同步时,我的svn报错 Previous operation has not finished; run 'cleanup' if it was interrupted

    解决办法:选择你的项目,右键,小组(Team),刷新或清理(Refresh or Clean)即可.

  3. c#-冒泡排序-算法

    冒泡排序(Bubble Sort) 冒泡排序算法的运作如下: 1.比较相邻的元素.如果第一个比第二个大,就交换他们两个. 2.对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对.在这一点,最后 ...

  4. C# socket通信

    最近在研究socket,今天看到很好的一篇关于socket通信的文章,故收藏了,慢慢琢磨. 我们在讲解Socket编程前,先看几个和Socket编程紧密相关的概念: 1.TCP/IP层次模型 当然这里 ...

  5. C语言回顾-指针

    1.指针:地址 指针变量:存放指针的变量 指针变量的定义:数据类型 *指针变量名 或者 数据类型* 指针变量名 指针变量的初始化:int *p=&a;int *p=NULL;(不能先定义后初始 ...

  6. ios webView 放大网页解决/input 获得焦点focus 网页放大 解决

    新手遇到的问题: 终于找到原因,各种HTML viewport 都试过 setScalePageToFit 也试过,webViewDidFinishLoad加JS代码,动态算webView.scrol ...

  7. python基础入门一(语法基础)

    作为自己正式接触并应用的第一门编程语言,在Alex和武sir两位大王的要求下,开始了写博客总结的日子.学习编程语言是很有趣的一件事情,但有2点请一定要谨记:1.做人靠自己,码代码也必须靠自己.能不能成 ...

  8. 突袭HTML5之WebGL 3D概述

    WebGL开启了网页3D渲染的新时代,它允许在canvas中直接渲染3D的内容,而不借助任何插件.WebGL同canvas 2D的API一样,都是通过脚本操纵对象,所以步骤也是基本相似:准备工作上下文 ...

  9. qt qml qchart 图表组件

    qt qml qchart 图表组件 * Author: Julien Wintz * Created: Thu Feb 13 23:41:59 2014 (+0100) 这玩意是从chart.js迁 ...

  10. VB 中 NumericUpDown 控件 如何为手动输入设定触发事件

    Private Sub numDuration_KeyUp(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) ...