程序员接活利器,dataTable组件带你快速开发,摆脱CRUD

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 RDS PostgreSQL,集群系列 2核4GB
简介: 程序员接活利器,dataTable组件带你快速开发,摆脱CRUD

本文摘要

·对于10,000元以下的外包项目,通常CRUD业务占据50%以上。每个项目虽然业务不同,但是对数据库中每个表的操作都是一定的。在做了n个项目之后,我觉得程序员不能无脑进行CRUD操作,这样我赚钱的效率太低了(哈哈)!

·本文将介绍一个在jquery.dataTable框架上二开的组件,帮助大家无脑开发。

作者:CSDN 征途黯然.

一、组件介绍


  本dataTable组件是基于jquery.dataTable进行二开的,其官方网址是https://datatables.net/

  组件的最终效果如下图:

3d76db6f4a484a71b9e09d106ed930ae.png 本组件支持的功能如下:

    · 自定义表格样式
    · 数据导出、打印、复制
    · 隐藏列、显示列
    · 选中(多)行数据
    · 搜索表格内容
    · 按表头排序
    · 分页【这个是服务器端分页,即时请求】

二、组件使用说明


   获取组件源代码,您可以关注公众号‘三黄工作室’回复‘dataTable’获取。项目的目录树如下图所示:

a34c9a4d142a4bccb845e4e2a2618e96.png

 其中,zh.json存放国际化资源,主要用来做中文显示;images中的3张图片,用作表头排序时显示降序、升序;API.phpconnect.php来模拟后端接口;其他都是组件需要用到的资源文件。

  下载好源代码后,大家可以修改index.html里面的代码来测试不同的效果,最后移植到自己的项目中就可以了。

三、组件参数详解


   index.html文件内容如下:

<html>
    <title>组件一 | 数据表格</title>
    <!-- dataTable基础样式 -->
    <link rel="stylesheet" href="plugs/dataTable/datatables.min.css">
    <!-- 左上方按钮组样式 -->
    <link rel="stylesheet" href="plugs/dataTable/buttons.dataTables.min.css">
    <!-- 选中行数据样式 -->
    <link rel="stylesheet" href="plugs/dataTable/select.dataTables.min.css">
    <!-- jquery -->
    <script src="plugs/jquery/jquery-3.3.1.min.js" type="text/javascript"></script>
    <!-- dataTable.js -->
    <script src="plugs/dataTable/jquery.dataTables.min.js" type="text/javascript"></script>
    <!-- 按钮组点击事件、配置支持 -->
    <script src="plugs/dataTable/dataTables.buttons.min.js" type="text/javascript"></script>
    <!-- 导出、复制、打印支持 -->
    <script src="plugs/dataTable/jszip.min.js" type="text/javascript"></script>
    <script src="plugs/dataTable/buttons.html5.min.js" type="text/javascript"></script>
    <script src="plugs/dataTable/buttons.print.min.js" type="text/javascript"></script>
    <!-- 隐藏列支持 -->
    <script src="plugs/dataTable/buttons.colVis.min.js" type="text/javascript"></script>
    <!-- 选中行数据支持 -->
    <script src="plugs/dataTable/dataTables.select.min.js" type="text/javascript"></script>
<body>
    <button id="loading">重新加载</button>
    <table id="Table" width="100%"></table>
</body>
<script>
    $(document).ready( function () {
        var table = $('#Table').DataTable({
            /******配置表格数据源********/
            ajax: {
                url: "API.php",// 数据接口,后台接收数据要满足dataTable的格式
                dataSrc: 'data'// 规定数据源在后台数据的位置
            },
            /******配置插件按钮组********/
            dom: 'Blfrtip',// 按钮组放置的位置在左侧
            buttons: [ 
                {extend:'copy',},// 复制
                {extend:'excel',},// 导出excel
                {extend:'csv',},// 导出csv
                {extend:'print'},// 打印
                {
                    extend: 'colvis',// 隐藏、显示列
                    columns: ':not(.noVis)'// 设置有样式为.noVis的列,不在隐藏的范围内
                }
            ],
            /******配置选择数据的样式********/
            select: {
                style:    'os',
                selector: 'td:first-child'// 表示通过点击第一个cell来选中行
            },
            /******配置服务器模式********/
            serverSide: true,
            /******配置表头********/
            columns: [
                {
                    className:      'select-checkbox noVis',
                    orderable:      false,
                    searchable:      false,
                    data:           null,
                    defaultContent: '',
                },
                { 
                    data: 'id',
                    title:'用户ID',
                    searchable:      true,
                    // "visible": false,
                    render: function ( data, type, row, meta ) {
                        return '<a href="'+data+'">'+data+'</a>';
                    },
                    className: 'noVis'
                },
                { 
                    data: "user_name",
                    title:"账号",
                    render: function ( data, type, row, meta ) {
                        return type === 'display' && data.length > 5 ?
                            '<span title="'+data+'">'+data.substr( 0, 38 )+'...</span>' :
                            data;
                        }
                },
                { data: "true_name","title":"姓名" },
                { data: "register_time","title":"注册时间" },
                { data: "last_login_time","title":"最近登录" },
                { data: "last_login_ip","title":"登录IP"},
                { data: "user_desc","title":"用户描述" },
            ],
            /******i18n  --  设置中文语言配置********/
            language: {
                url:'plugs/dataTable/i18n/zh.json'
            },
            /******设置各个组件是否显示********/
            "bPaginate": true, //翻页组件是否开启
            "sPaginationType": "full_numbers",// 首页、尾页按钮是否开启
            "bLengthChange": true, //改变每页显示数据数量组件是否开启
            "aLengthMenu": [[5, 10, 25, 50, 100, -1], [5, 10, 25, 50, 100, "所有"]],//每页显示数量的可选项与对应文字
            "bFilter": true, //查询过滤组件是否开启
            "bSort": true, //排序功能是否开启
            "bInfo": true,//页脚信息是否显示
            // "bStateSave": true,//状态保存,使用了翻页或者改变了每页显示数据数量,会保存在cookie中,下回访问时会显示上一次关闭页面时的内容。
            "bProcessing" : true,
        });
        /***
         * 重新加载表格
         * */
        $('#loading').click( function () {
            table.draw( false );
        });
        /***
         * 配置隐藏列功能
         * */
        $('.toggle-vis').on( 'click', function (e) {
            e.preventDefault();
            var column = table.column( $(this).attr('data-column') );
            column.visible( ! column.visible() );
        } );
    });
</script>
</html>

  【引入资源文件】----第3-22行,引入了必要的css、js资源,各自的作用详见注释;


  【表格基本样式】----第26行,添加了一个table标签,必须有id值,需要设置width为100%,这是最基本配置,没有什么样式。在我们二开中,可以给table加上class,这样就支持各种漂亮的样式了。


  【初始化】----第32-123行,初始化表格,里面加入了很多配置;


  【配置表格数据源】----第33-37行,指定此表格数据来源的接口;url指定接口,dataSrc指定我们的表格数据在后台返回数据中的位置。例如:

/******配置表格数据源********/
ajax: {
    url: "API.php",// 数据接口,后台接收数据要满足dataTable的格式
    dataSrc: 'data'// 规定数据源在后台数据的位置
},

对应的后台数据格式为:

{
  "data" : [
    {...},
    {...},
    ...
  ]
}

  【配置插件按钮组】----第38-49行,配置插件按钮,包括复制、导出、打印功能,注释介绍的很清楚,唯一值得注意的是,这样的写法看似很简单,其实都是调用的其他js文件里面exports出来的模块。


  【配置选择数据的样式】----第50-54行,值得注意的是,selector属性规范了选择表格数据的行为,'td:first-child'规定了只能点击每一行的第一个格子才能选中此行,默认是点击一行的任何位置就可以选中。


  【配置服务器模式】----第56行,非常重要,开启服务器来承载分页功能,开启之后,前端请求的数据格式如下:

image.png

   而我们在后端必须把数据封装成一定的格式,如下:

image.png

   不管我们后端是什么语言,都需要接收dataTable封装好的数据格式,包括如下(我的后端是PHP版本,主要看注释):

// 起始索引
@$start=$_GET['start'];
// 页面长度
@$length=$_GET['length'];
// 搜索关键字
@$search=$_GET['search']['value'];
// 表头属性
@$columns=$_GET['columns'];
// 排序属性
@$order=$_GET['order'];

   这里给出我封装好的PHP后端的例子,语言不重要,主要是理解一下就行:

<?php
    require('connect.php');
    date_default_timezone_set("PRC"); //设置成亚洲时区
    // 起始索引
    @$start=$_GET['start'];
    // 页面长度
    @$length=$_GET['length'];
    // 搜索关键字
    @$search=$_GET['search']['value'];
    // 表头属性
    @$columns=$_GET['columns'];
    // 排序属性
    @$order=$_GET['order'];
    $result_json = [];
    /**
     * 拼接sql语句
     */
    $sql_all = "SELECT * from sy_users ";
    $sql = $sql_all;
    // 搜索关键字
    $flag = true;
    foreach($columns as $c){
        if($c['data'] == '') continue;
        if($search != '' && $c['searchable'] && $flag) {
            $sql.=" where ".$c['data']." like '%$search%' ";
            $flag = !$flag;
        }else if($search != '' && $c['searchable']){
            $sql .= " or ".$c['data']." like '%$search%' ";
        }
    }
    // 排序
    if(count($order)!=0 && $order[0]['column']!=0 ){
        $sql.=" order by ";
        foreach($order as $o){
            $sql .= $columns[ $o['column'] ]['data']." ".$o['dir']." ";
        }
    }
    // 分页
    $sql_page =$sql." limit $start,$length";
    /**
     * 设置返回数据
     */
    $result_mysqli=mysqli_query( $con, $sql_all );
    while(@$obj = mysqli_fetch_object($result_mysqli))
        $result_json[]=$obj;
    // 数据的总条数
    $recordsTotal = count($result_json);
    $result_json = [];
    $result_mysqli=mysqli_query( $con, $sql );
    while(@$obj = mysqli_fetch_object($result_mysqli))
        $result_json[]=$obj;
    // 最终过滤后数据的总条数
    $recordsFiltered = count($result_json);
    $result_json = [];
    $result_mysqli=mysqli_query( $con, $sql_page );
    while(@$obj = mysqli_fetch_object($result_mysqli))
        $result_json[]=$obj;
    $json = array(
        'data'=> $result_json,
        'recordsTotal' => $recordsTotal,
        'recordsFiltered' => $recordsFiltered
    );
    echo json_encode($json);
?>

  【配置表头】----第58-90行,非常重要,配置表头的属性,data表示该列在返回的数据中的字段,title表示表头名称,orderable表示是否能排序,searchable表示是否参与检索,className为数据行设置class,render是一个回调函数,具体有2种常用用法,见上面的代码。   【设置中文语言配置】----第92-95行,显示中文版本,调用本地的json文件,不用管。

  【设置各个组件是否显示】----第97-106行,注释很详细,可以自己测试看一下效果。

本组件的源代码


如果需要本组件的源代码,请扫描关注我的公众号,回复“dataTable”即可。

相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
2月前
|
存储 JSON 测试技术
【HarmonyOS Next开发】云开发-云数据库(二)
实现了云侧和端侧的云数据库创建、更新、修改等操作。这篇文章实现调用云函数对云数据库进行增删改查。
65 9
【HarmonyOS Next开发】云开发-云数据库(二)
|
29天前
|
前端开发 Java 数据库连接
Java后端开发-使用springboot进行Mybatis连接数据库步骤
本文介绍了使用Java和IDEA进行数据库操作的详细步骤,涵盖从数据库准备到测试类编写及运行的全过程。主要内容包括: 1. **数据库准备**:创建数据库和表。 2. **查询数据库**:验证数据库是否可用。 3. **IDEA代码配置**:构建实体类并配置数据库连接。 4. **测试类编写**:编写并运行测试类以确保一切正常。
52 2
|
2月前
|
SQL 关系型数据库 API
HarmonyOs开发:关系型数据库封装之增删改查
每个方法都预留了多种调用方式,比如使用callback异步回调或者使用Promise异步回调,亦或者同步执行,大家在使用的过程中,可以根据自身业务需要进行选择性调用,也分别暴露了成功和失败的方法,可以针对性的判断在执行的过程中是否执行成功。
110 13
|
2月前
|
存储 前端开发 关系型数据库
鸿蒙开发:实现键值数据库存储
对于数据量比较的小的,我们直接选择轻量级的用户首选项方式即可,而对于数据量比较大的情况下,直接可以使用数据库,而对于相对来说,比较大的数据,我们就可以使用键值型数据库方式
103 2
|
3月前
|
存储 SQL API
探索后端开发:构建高效API与数据库交互
【10月更文挑战第36天】在数字化时代,后端开发是连接用户界面和数据存储的桥梁。本文深入探讨如何设计高效的API以及如何实现API与数据库之间的无缝交互,确保数据的一致性和高性能。我们将从基础概念出发,逐步深入到实战技巧,为读者提供一个清晰的后端开发路线图。
|
3月前
|
存储 缓存 NoSQL
2款使用.NET开发的数据库系统
2款使用.NET开发的数据库系统
|
3月前
|
存储 SQL 数据库
深入浅出后端开发之数据库优化实战
【10月更文挑战第35天】在软件开发的世界里,数据库性能直接关系到应用的响应速度和用户体验。本文将带你了解如何通过合理的索引设计、查询优化以及恰当的数据存储策略来提升数据库性能。我们将一起探索这些技巧背后的原理,并通过实际案例感受优化带来的显著效果。
71 4
|
3月前
|
存储 Java 关系型数据库
在Java开发中,数据库连接是应用与数据交互的关键环节。本文通过案例分析,深入探讨Java连接池的原理与最佳实践
在Java开发中,数据库连接是应用与数据交互的关键环节。本文通过案例分析,深入探讨Java连接池的原理与最佳实践,包括连接创建、分配、复用和释放等操作,并通过电商应用实例展示了如何选择合适的连接池库(如HikariCP)和配置参数,实现高效、稳定的数据库连接管理。
92 2
|
3月前
|
监控 Java 数据库连接
在Java开发中,数据库连接管理是关键问题之一
在Java开发中,数据库连接管理是关键问题之一。本文介绍了连接池技术如何通过预创建和管理数据库连接,提高数据库操作的性能和稳定性,减少资源消耗,并简化连接管理。通过示例代码展示了HikariCP连接池的实际应用。
33 1
|
4月前
|
SQL JavaScript 关系型数据库
node博客小项目:接口开发、连接mysql数据库
【10月更文挑战第14天】node博客小项目:接口开发、连接mysql数据库

热门文章

最新文章