SSM实战记录(一)--一个大体的分页流程

这是一个使用springMVC+spring+mybatis+bootstrap table做的分页流程,网上之前搜到的类似的教程实在太少了,所以就想着写一个大体的过程(没写的很详细),能帮助到一些人是最好的.



先来一张完成图,可以搜索和按照制定列排序,这些都是操作都是从通过sql搜索出来的.


1.bootstrap table前端设计

对于这种插件,官方例子一般都很详细,遇到不懂得应该去官网查例子,或者翻墙查,反正对百度搜索出来的垃圾不忍直视…

对于表格要注意以下几个问题:

1. 取出来的结果怎么提交给表格(通过ajax请求,返回json串)

2. 得到的json串怎么和表格字段相对应(通过data-field字段)

3. 怎么传递请求参数?怎么设计分页?(传递参数利用queryParams参数,设计分页主要是服务器要返回两个字段,total表示总数量,rows表示当前页数据条数和你搜出来的记录)

<div class="wrapper wrapper-content">
    <div class="row">
        <div class="col-sm-12">
            <div class="animated fadeInRightBig">
                <!--添加内容区域-->
                <div class="ibox-content">
                    <h4 class="example-title">题目列表</h4>
                    <div class="btn-group hidden-xs"  role="group" id="exampleToolbar">
                        <button type="button" class="btn btn-outline btn-default">
                            <i class="glyphicon glyphicon-plus" aria-hidden="true"></i>
                        </button>
                    </div>
                    <!--添加题目表-->
                    <table  id="exampleTableToolbar3" data-toggle="table" >
                        <thead>
                        <tr>
                        <!--data-field和你从数据库取出来的pojo类名相对应-->
                            <th data-field="id" data-sortable="true">ID</th>
                            <th data-field="pro_name">标题</th>
                            <th data-field="pro_num">数据组数</th>
                            <th data-field="pro_path">数据路径</th>
                            <th data-field="cate_id">类别</th>
                            <th data-field="username">上传用户</th>
                            <th data-field="credits" data-sortable="true">积分</th>
                            <th data-field="pro_pass" data-sortable="true">提交次数</th>
                            <th data-field="pro_pass" data-sortable="true">通过次数</th>
                            <th data-field="start_time">加入时间</th>
                            <%--这里是用来编辑的,可以添加编辑,删除等按钮--%>
                            <th data-field="action" data-formatter="actionFormatter" data-events="actionEvents">Action</th>
                        </tr>
                        </thead>
                    </table>
                </div>
                <!--添加题目表结束-->

            </div>
        </div>

2.ajax请求json串

具体请求对于bootstrap table一般是放在js里面控制.

var table3 = $("#exampleTableToolbar3");

table3.bootstrapTable({
    url: "/system/getAllProblem",//具体请求地址
    method: ‘post‘,//请求方式
    cache: false,                      //是否使用缓存,默认为true,所以一般情况下需要设置一下这个属性(*)
    pagination: true,                  //是否显示分页(*)
    search: !0,//是否开启搜索框
    showRefresh: !0,//是否显示刷新框
    sidePagination: "server",          //分页方式:client客户端分页,server服务端分页(*)
    queryParams: queryParams,//传递参数(*)
    pageSize: 10,                      //每页的记录行数(*)
    showColumns: !0,//是否显示columns按钮
    toolbar: "#exampleToolbar",//对用的toolbar
    iconSize: "outline",
    icons: {refresh: "glyphicon-repeat", columns: "glyphicon-list"},//对应按钮对应的字体图标
    uniqueId: "ID"//主键id
});

//题目表参数传递
function queryParams(params) {
    return {
        limit:params.limit,//每页数据条数
        offset:params.offset,//当前页偏移
        order:params.order,//排序
        ordername:params.sort,//需要排序的字段
        search:params.search//搜索的字段
    };
}

随便测试下,就能看到的传递的字段,是json格式的,说明我们要查询10条记录,从第1条开始,按照id奖序,并且要查询带有字符p的相关数据

为了接收参数的方面,我们把上面的几个参数封装到pojo类中,当成一个工具类

public class PageUtil {
    private int limit = 10;//每页限制数,默认为10
    private int offset = 1;//当前页偏移,默认为1
    private String order;//排序
    private String ordername;//排序列名称
    private String search;//搜索内容

    //这里是模糊查询,所以需要对search字段改造下
        public void setSearch(String search) {
        this.search = "%"+search+"%";
    }
    //省略get和set方法
}

3.mybatis对应的sql语句

基本查询语句,会根据PageUtil里面封装的值自动来查询


    <!--查询出所有题目-->
    <select id="findAllProblem" resultType="com.aust.model.system.Problem" parameterType="com.aust.util.PageUtil">
        SELECT * FROM cum_problem
        <where>
            <if test="search != null">
                (pro_name LIKE #{search} ) or (username LIKE #{search})
            </if>
        </where>
        <if test="ordername != null">
            <!--这里使用$符号-->
            ORDER BY ${ordername} ${order}
        </if>
    </select>

4.spring管理的dao

DAO里面只要写上调用mybatis这个sql就可以了.具体错误什么的都由spring来处理.

@Repository("CumProblemMapper")
public class CumProblemMapper {

    @Resource(name = "sqlSessionTemplate")
    private SqlSessionTemplate sqlSessionTemplate;

    public List<Problem> findAllProblem(PageUtil pageUtil){
        return sqlSessionTemplate.selectList("cumProblemMapper.findAllProblem",pageUtil);
    }
}

5.springMVC管理的controller

写控制器要注意以下几点问题:

1. 如何接收传递过来的json数据(用@requestBody pageUtil)

2. 如何分页查询?(利用mybatis分页插件(PageHelper),或者直接在sql里面加上limit ?,?)

3. 分页查询后如何返回json数据?(利用@ResponseBody)

解决了以下几个问题,那么控制器就可以设计如下:

@Controller
@RequestMapping(value = "/system")
public class CumProblemController {
    @Resource(name = "CumProblemMapper")
    private CumProblemMapper cumProblemMapper;

    /**
     * 进入问题列表
     */
    @RequestMapping(value = "/problem_list",method = RequestMethod.GET)
    public String getAllProblemList(){
        return "system/problem_list";
    }

    /**
     * 得到全部的题目
     * @return
     */
    @RequestMapping(value = "/getAllProblem",method = RequestMethod.POST)
    public @ResponseBody Map<String,Object> getAllProblem(@RequestBody PageUtil pageUtil){
        //存储所有的信息,方面返回json串
        Map<String,Object> model = new HashMap<>();
        //开始分页,传递的参数1为请求第几页,参数2为请求条数
        PageHelper.startPage(pageUtil.getOffset()/pageUtil.getLimit()+1,pageUtil.getLimit());
        //查询
        List<Problem> list = cumProblemMapper.findAllProblem(pageUtil);
        //查询结果包装到map
        model.put("total",info.getTotal());
        //查询结果包装到map
        model.put("rows",list);
        //返回json串
        return model;
    }
}


6.到此完成了分页功能,具体的很多参数你都可以另外再配置了,多参考官方文档,有问题请指出

时间: 2024-10-09 07:15:14

SSM实战记录(一)--一个大体的分页流程的相关文章

SSM实战记录(二)--在线OJ系统

简介: 学习SSM框架后,做出来的一个比较系统的项目,前端,数据库,后台全部自己完成,借鉴了很多前辈的经验,完成后颇有成就感,当然也学到了很多东西,至于能不能上线给学校用,还要看领导了- 项目主要是类似ACM一样的在线判题系统,目前已实现判题,项目主要分为WEB部分和判题服务器,判题服务器直接使用开源的一个EXE,本人无能为力,写不出来这玩意. 展示地址: http://mrdear.cn:8080/ (个人服务器,速度挺慢的) 项目源码全部放出来,后台代码倒不是很难,反而设计前台页面花了更多的

云端大数据实战记录-大数据推荐

(转载请注明出处:http://blog.csdn.net/buptgshengod) 1.背景 这是博主第一次大数据实战的经历,之前都是自己写一些算法然后测试很小的数量级.这次是真正接触到TB集的数据,而且完全是在云端处理.下面就把这次的经历简单分享一下. 首先简单介绍一下这次比赛的环境吧: 1.云:采用的是阿里云 2.数据:从四月十五号到八月十五号期间,用户两千多万的购买行为(包括时间,购买.收藏.购物车的次数) 3.工具:阿里提供的xlab(里面有很多算法,随机森林.逻辑回归.knn等).

分享一个通用的分页SQL

又很久没写博客,今天记录一个SQLserver通用分页存储过程(适用于SqlServer2000及以上版本) 1.支持连表 2.支持条件查询 USE [MYDB] GO /****** Object:  StoredProcedure [dbo].[SP_CommonPage] SET QUOTED_IDENTIFIER ON GO ------------------------------------ --用途:分页存储过程(对有主键的表效率极高) --说明: ---------------

Asp.Net MVC学习记录之“一个实体对象不能由多个 IEntityChangeTracker 实例引用”

原文:浅谈 js 正则之 test 方法 其实我很少用这个,所以之前一直没注意这个问题,自从落叶那厮写了个变态的测试我才去看了下这东西.先来看个东西吧. ? 1 2 3 4 5 var re = /\d/; console.log( re.test("1") ); console.log( re.test("1") ); console.log( re.test("1") ); console.log( re.test("1"

记录-第一个python3的socket编程--not &#39;str&#39;

看到这个提示之后,确定了这个问题主要是是字符编码的问题了,那如何解决这个字符编码问题,目前想到的办法就是通过encode和decode来做字符编码转换了. 服务端进程 # cat tcp_server.py  #! /bin/env python3 # -*- coding:utf-8 -*- ''' Created on 2016年12月19日   @author: CC ''' import socket import datetime HOST='0.0.0.0' PORT=3434 s=

第八天 1-7 实战:创建一个root无法删除的文件

实战:创建一个root无法删除的文件 简介:Linux文件的最底层(内核级别)属性的查看与修改 命令:lsattr.chattr Linux文件除了具有基本权限rwx,及特殊权限(SUID.SGID.SBIT(Sticky))外,还有几个更接近底层的文件),我们可通过lsattr查看这些属性,并通过chattr来修改这些属性 命令格式:lsattr [-RVadv] [file]-R  #递归的列出文件夹中所有文件的属性-V  #查看lsattr版本-a  #查看list所有的文件,包括隐藏文件

分享一个PHP数据库分页类

本帖最后由 luenmicro 于 2014-11-12 23:19 编辑 分享一个PHP数据库分页类. [code]<?php    class page    {        private $pagesize;        private $lastpage;        private $totalpages;        private $nums;        private $numPage=1; function __construct($page_size,$tota

推荐:想了解一个项目完整测试流程,看这篇文章就OK了

推荐:想了解一个项目完整测试流程,看这篇文章就OK了 写在前面:本文来自真实企业测试人员的工作总结,用一个项目的进行流程为线索,记录每个阶段测试包含的内容及关注点. <ignore_js_op> 项目的测试流程大只包含的几个阶段:立项.需求评审.用例评审.测试执行.测试报告文档 一.立项后测试需要拿到的文档 1.需求说明书 2.原型图(及UI图) 3.接口文档 4.数据库字典(表的数量.缓存机制) 二.需求评审 参加人员:开发.测试及需求人员,由需求人员主持讲解. 为了会议的有效举行,测试及开

shell脚本,一个shell的启动流程。

#一个shell的启动流程 #shell有一些变量,叫做环境变量,这些变量是可以继承的, #比如父shell有$UID,子shell也可以有,而且继承父shell的. #正常我们声明一个变量,a=1,在子shell里,a是空,自己声明的变量不能被继续. 如果我们自己声明变量,想让子shell也可以用 [[email protected] wyb]# cat a.sh #!/bin/bash echo $a #如果我们自己声明变量,想让子shell也可以用,#export 是内置变量,通过它声明的