第18章—后端分页(Mybatis)

spring boot 系列学习记录:http://www.cnblogs.com/jinxiaohang/p/8111057.html

码云源码地址:https://gitee.com/jinxiaohang/springboot

  本次练习在之前第04章—整合Mybatis基础上进行,也算是Bootstrap-Table基础上进行扩展。

在使用mybatis时,我会将实体类属性和表字段名一致,这样可以不用配映射关系,会自动映射。

在使用JPA时,要以一定方式进行设置实体类属性和表字段名,举个例子:类名UserInfo->表名user_info ,属性userId->字段user_id,属性password->字段password。

一、下载组件

下载bootstrap-table:http://bootstrap-table.wenzhixin.net.cn/zh-cn/getting-started/

下载bootstrap:https://v3.bootcss.com/

下载jqurey:http://jquery.com/

  下载源码后解压出来,在demo中导入我们想要的代码。

如下图所示:

  jquery的一个js文件、

  bootstrap的一个js文件、一个css文件、一个字体包

  bootstrap-table的两个js文件、一个css文件

二、bootstrap-table使用

  在resources下的static中,新建一个html文件添加以下内容:(这里就与第17章写的不太一样了)

<!DOCTYPE html>
<html lang="zh-CN">
<head>

    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">

    <title>
        开始使用 Bootstrap Table
    </title>

    <link rel="stylesheet" href="css/bootstrap.min.css"><!--需要添加fonts图标显示才会好-->
    <link rel="stylesheet" href="css/bootstrap-table.min.css">
    <script src="js/jquery-3.2.1.min.js"></script>
    <script src="js/bootstrap.min.js"></script>
    <script src="js/bootstrap-table.min.js"></script>
    <script src="js/bootstrap-table-zh-CN.min.js"></script>

</head>

<body>
<div class="container">
    <div id="toolbar" class="btn-group">
        <button id="btn_add" type="button" class="btn btn-default">
            <span class="glyphicon glyphicon-plus" aria-hidden="true"></span>新增
        </button>
        <button id="btn_edit" type="button" class="btn btn-default">
            <span class="glyphicon glyphicon-pencil" aria-hidden="true"></span>修改
        </button>
        <button id="btn_delete" type="button" class="btn btn-default">
            <span class="glyphicon glyphicon-remove" aria-hidden="true"></span>删除
        </button>
    </div>
    <table id="table"></table>
</div>
</body>

<script>
    //先销毁表格
    $(‘#table‘).bootstrapTable(‘destroy‘);

    $(‘#table‘).bootstrapTable({

        url:‘/api/user/paging‘,
        method: ‘GET‘,                      //请求方式(*)
        //contentType: "application/x-www-form-urlencoded",//一种编码。好像在post请求的时候需要用到。这里用的get请求,注释掉这句话也能拿到数据
        //dataType:‘jsonp‘,                   //跨域设置
        toolbar: ‘#toolbar‘,                //工具按钮用哪个容器
        pagination: true,                   //是否显示分页(*)
        pageNumber:1,//初始化加载第一页,默认第一页
        pageSize: 2,//每页的记录行数(*)
        pageList: [2,3,4],//可供选择的每页的行数(*)
        dataField: "rows",//这是返回的json数组的key.默认好像是"rows".这里只有前后端约定好就行
        showColumns: true,                  //是否显示所有的列
        //minimumCountColumns: 2,             //最少允许的列数
        showRefresh: true,                  //是否显示刷新按钮
        queryParamsType:‘‘,
        queryParams: function queryParams(params) {
            var param = {
                offset: (params.pageNumber-1)*params.pageSize,//偏移量
                limit: params.pageSize//长度
            };
            return param;
        },
        sidePagination: "server",
        columns: [{
            checkbox: true,
            align: ‘center‘//水平居中
        }, {
            field: ‘userId‘,
            title: ‘ID‘,
            align: ‘center‘//水平居中
        }, {
            field: ‘username‘,
            title: ‘Name‘,
            align: ‘center‘//水平居中
        }, {
            field: ‘password‘,
            title: ‘Age‘,
            align: ‘center‘//水平居中
        }
        ]
    });
</script>

三、分页在各层的实现

dao层添加:

    @Select("select * from user limit #{offset},#{limit}")
    List<User> paging(Map<String,Object> param);

service层添加:

    /**
     * 分页获取数据
     * @param param
     * @return
     */
    Map<String,Object> paging(Map<String,Object> param);

serviceimpl层添加:

    @Override
    public Map<String,Object> paging(Map<String, Object> param) {
        //bootstrap-table要求服务器返回的json须包含:totlal,rows
        Map<String,Object> result = new HashMap<String,Object>();
        List<User> rows = userMapper.paging(param);
        int total = userMapper.list().size();
        result.put("total",total);
        result.put("rows",rows);
        return result;
    }

controller层添加:

    @GetMapping("paging")
    public Map<String,Object> paging(@RequestParam int limit,@RequestParam int offset){
        /*所需参数*/
        Map<String, Object> param=new HashMap<String, Object>();
        param.put("limit", limit);
        param.put("offset", offset);
        return userService.paging(param);
    }

四、运行展示

  访问http://127.0.0.1:8080/api/user/paging?offset=0&limit=5,接口数据格式展示:

  运行效果展示:

显示条数可根据两项修改。

pageSize: 2,//每页的记录行数(*)
pageList: [2,3,4],//可供选择的每页的行数(*)

五、总结

  这次才实现真正意义上的分页。

原文地址:https://www.cnblogs.com/jinxiaohang/p/8370714.html

时间: 2024-11-09 16:05:43

第18章—后端分页(Mybatis)的相关文章

第19章—后端分页(PageHelper)

spring boot 系列学习记录:http://www.cnblogs.com/jinxiaohang/p/8111057.html 码云源码地址:https://gitee.com/jinxiaohang/springboot PageHelper开源分页工具: https://gitee.com/free/Mybatis_PageHelper https://github.com/pagehelper/Mybatis-PageHelper 本次练习在之前第04章-整合Mybatis基础上

Java开发企业级权限管理系统课程 电商权限管理系统视频教程 共18章

第1章 课程整体概述(2018配套教程:电商前端+电商后端+电商权限管理系统课程) 本章首先介绍为什么大公司都有权限管理系统,然后会对权限管理中流行的RBAC模型及拓展做重点说明,并给出理想中的权限管理系统应该是什么样子的.之后会对这门课程做总体内容介绍与课程安排,最后会介绍这门课程会涉及到的技术,让大家明确了解到这门课程到底能收获些什么(课程提供QQ交流群).... 第2章 Spring Security权限框架理论与实战演练 本章首先让大家学习到Spring Security权限框架的架构,

《TCP/IP详解卷1:协议》第17、18章 TCP:传输控制协议(2)-读书笔记

章节回顾: <TCP/IP详解卷1:协议>第1章 概述-读书笔记 <TCP/IP详解卷1:协议>第2章 链路层-读书笔记 <TCP/IP详解卷1:协议>第3章 IP:网际协议(1)-读书笔记 <TCP/IP详解卷1:协议>第3章 IP:网际协议(2)-读书笔记 <TCP/IP详解卷1:协议>第4章 ARP:地址解析协议-读书笔记 <TCP/IP详解卷1:协议>第5章 RARP:逆地址解析协议-读书笔记 <TCP/IP详解卷1:协

设计模式之第18章-观察者模式(Java实现)

设计模式之第18章-观察者模式(Java实现) 话说曾小贤,也就是陈赫这些天有些火,那么这些明星最怕的,同样最喜欢的是什么呢?没错,就是狗仔队.英文的名字比较有意思,是paparazzo,这一说法据说来自意大利电影<滴露牡丹开>中一个专门偷拍明星照片的一个摄影师的名字,“Paparazzo”,中文译为帕帕拉齐,俗语就是狗仔队.这些明星因狗仔队而荣,获得曝光率,也因狗仔队而损,被曝光负面新闻,不管怎么说,总之是“火起来了”,让明星们又爱又恨.(众人:鱼哥,你扯远了).咳咳,这个狗仔队其实嘛,也就

《Cracking the Coding Interview》——第18章:难题——题目10

2014-04-29 04:22 题目:给定一堆长度都相等的单词,和起点.终点两个单词,请从这堆单词中寻找一条变换路径,把起点词变成终点词,要求每次变换只能改一个字母. 解法:Leetcode中有Word Ladder,这题基本思路一致. 代码: 1 // 18.10 Given a list of words, all of same length. Given a source and a destionation words, you have to check if there exis

《Cracking the Coding Interview》——第18章:难题——题目9

2014-04-29 04:18 题目:有一连串的数被读入,设计一个数据结构,能随时返回当前所有数的中位数. 解法:用一个大顶堆,一个小顶堆将数分成数量最接近的两份,就能轻松得到中位数了. 代码: 1 // 18.9 A stream of integers are passed to you, you have to tell me the median as they keep coming in. 2 #include <climits> 3 #include <iostream&

《Cracking the Coding Interview》——第18章:难题——题目13

2014-04-29 04:40 题目:给定一个字母组成的矩阵,和一个包含一堆单词的词典.请从矩阵中找出一个最大的子矩阵,使得从左到右每一行,从上到下每一列组成的单词都包含在词典中. 解法:O(n^3)级别的时间和空间进行动态规划.这道题目和第17章的最后一题很像,由于这题的时间复杂度实在是高,我动手写了字典树进行加速.如果单纯用哈希表来作为词典,查询效率实际会达到O(n)级别,导致最终的算法复杂度为O(n^4).用字典树则可以加速到O(n^3),因为对于一个字符串"abcd",只需要

《Cracking the Coding Interview》——第18章:难题——题目11

2014-04-29 04:30 题目:给定一个由'0'或者'1'构成的二维数组,找出一个四条边全部由'1'构成的正方形(矩形中间可以有'0'),使得矩形面积最大. 解法:用动态规划思想,记录二维数组每个元素向上下左右四个方向各有多少个连续的'1',然后用O(n^3)时间计算出满足条件的最大正方形.时间复杂度O(n^3),空间复杂度O(n^2). 代码: 1 // 18.11 Given an NxN matrix of 0s and 1s, find out a subsquare whose

《Cracking the Coding Interview》——第18章:难题——题目12

2014-04-29 04:36 题目:最大子数组和的二位扩展:最大子矩阵和. 解法:一个维度上进行枚举,复杂度O(n^2):另一个维度执行最大子数组和算法,复杂度O(n).总体时间复杂度为O(n^3),还需要O(n)额外空间. 代码: 1 // 18.12 Given an n x n matrix, find the submatrix with largest sum. Return the sum as the result. 2 #include <algorithm> 3 #inc