MySQL 按照数据库表字段动态排序 查询列表信息


背景描述

项目中数据列表分页展示的时候,前端使用的Table组件,每列自带对当前页的数据进行升序或者降序的排序。

但是客户期望随机点击某一列的时候,对查询到的所有数据进行排序。

举例说明:

查询到的有100条数据,每页10条,共10页。前端Table组件,可以对当前页的10条数据,进行排序,其他的9页并不参与排序。

但是,实际期望是对查询到的10页数据均参与排序。

并且不是特定列,而是每列均可以按照升序或者降序,将查询到的结果进行再次排序。


处理方式

由于前端技术的限制,需要在后端进行处理,对查询列表的接口进行修改。

1、修改查询实体类

首先需要在查询条件的请求实体中,增加两个字段 orderField orderType,用于保存传入字段名和排序的方式(升序ASC,降序DESC)

orderField:用于接收需要排序的字段

orderType:用于接收排序的方式,ASC,DESC,asc,desc

代码如下:

    // 对字段进行排序
private String orderField; // 存放排序字段
private String orderType; // ASC DESC public String getOrderField() {
return orderField;
} public void setOrderField(String orderField) {
this.orderField = orderField;
} public String getOrderType() {
return orderType;
} public void setOrderType(String orderType) {
this.orderType = orderType;
}

2、修改 mapper.xml 文件

找到MyBatis的Mapper文件中,在查询列表方法的SQL。

增加如下代码:

<if test="orderField != null and orderField != '' and orderType != null and orderType != ''">
  ORDER BY ${orderField} ${orderType}
</if>

【特别注意】:此处SQL的两个参数,一定要使用 ${ } 接收,而不能使用 #{ }。否则,不会到达预期的效果。

${ }:不会对传入的字符串进行处理。比如:传入的是 create_time 和 desc,${ }处理后的效果是 ORDER BY create_time desc,可以实现按照 create_time字段倒序排序的效果。

#{ }:会对传入的字符串进行处理。比如:传入的是 create_time 和 desc,#{ }处理后的效果是 ORDER BY 'create_time' 'desc',会当成字符串常量,达不到按照 create_time字段倒序排序的效果。

当然,${ }可能会引发SQL注入。一般情况下,都是使用 #{ }的。只有这种不需要对传入的值进行转换的场景,才会使用 ${ }。

为了实现标题中的功能,恰好用到了 ${ } 的 这个特性而已。

3、增加接口调用字段

在传参时,增加 orderField 和 orderType ,效果如下

{
"pageNum":1,
"pageSize":5,
"orderField":"create_time",
"orderType":"desc"
}

至此,按照传入的字段名和排序方式进行排序的功能就实现了。

MySQL 按照数据库表字段动态排序 查询列表信息的更多相关文章

  1. 关于解决SpringDataJpa框架实体类表字段创建顺序与数据库表字段展示顺序不一致的问题

    今天在公司的项目开发中,遇到一个问题: 后端对象实体类中写入字段顺序与数据库中的存储顺序不一致. 仔细观察到数据库中的表字段的排序方式是按照拼音字母的顺序abcdef......来存储的 而我的实体类 ...

  2. mysql中修改表字段名/字段长度/字段类型详解

    在mysql中我们对数据表字段的修改命令只要使用alter就可以了,下面我来给大家详细介绍mysql中修改表字段名/字段长度/字段类型等等一些方法介绍,有需要了解的朋友可参考. 先来看看常用的方法 M ...

  3. Java之数据库表字段有关键字报错java.sql.SQLSyntaxErrorException

    前两天在开发中遇到一个坑,本来我在快乐的做着增删改查,然后悲剧发生了,在查询数据库的过程中,报了java.sql.SQLSyntaxErrorException: 经过排查,是因为数据库表字段中存在关 ...

  4. mysql 批量修改 表字段/表/数据库 字符集和排序规则

    今天接到一个任务是需要把数据库的字符编码全部修改一下,写了以下修正用的SQL,修正顺序是   表字段 > 表 > 数据库. 表字段修复: #改变字段数据 SELECT TABLE_SCHE ...

  5. mysql 数据库 表字段添加表情兼容

    项目中的几个需要支持Emoji表情符号,手机自带的表情,其实添加也很简单: 1 修改数据库 配置my.cnf  init-connect='SET NAMES utf8mb4'             ...

  6. mysql数据库表字段使用DESC等关键字报错及解决方法

    <!-- desc是MySQL数据库的关键字,作为字段名直接使用会报错 --><sql id="Base_Column"> id,mol,ip,port,n ...

  7. MySQL查询表与表字段的信息

    环境: Mysql数据库 库名:db_name 表名: table_name1 table_name2 查询一个里面所有表的信息: use information_scheam; select * f ...

  8. mysql 两张表字段模糊匹配--字符串拼接函数

    concat(A,B,C,...)  拼接字符串 例如concat('123','***','345')  =>123***345 SELECT concat( substr(t1.CODE, ...

  9. mysql创建外键出错(注意数据库表字段排序)

    1.  两个字段的类型或者大小不严格匹配.例如,如果一个是int(10),那么外键也必须设置成int(10),而不是int(11),也不能是tinyint.另外,你还必须确定两个字段是否一个为 sig ...

随机推荐

  1. Asp.Net Zero通用打印实现

    Asp.Net Zero是一款非常优秀的web框架,可以用来快速构建业务系统.框架满足了业务系统所需的大部分通用功能,但是系统必须的打印报表功能一直没有实现.下面给大家介绍如何在zero中集成打印功能 ...

  2. Centos7添加密码安全策略

    设置密码中至少包含一个小写字符,执行命令:# authconfig --enablereqlower --update查看设置:# grep "^lcredit" /etc/sec ...

  3. 理解JavaScript里的 [].forEach.call() 写法

    原文:  http://www.webhek.com/javascript-foreach-call document.querySelectorAll() 返回的并不是我们想当然的数组,而是 Nod ...

  4. QTP(7)

    一.输出值(Output Value) 1.应用场景: 1) 关心被测系统的数据 2) 将被测系统生成的数据作为后面步骤的输入 2.输出值就是输出被测系统中实际运行时的数据的一种技术 a.运行中对象的 ...

  5. Datasets and Evaluation Metrics used in Recommendation System

    Movielens and Netflix remain the most-used datasets. Other datasets such as Amazon, Yelp and CiteUli ...

  6. JS 给数字加三位一逗号间隔的方法

    1.方法 function format_number(n) { var b = parseInt(n).toString(); var len = b.length; ) { return b; } ...

  7. WCF错误:由于目标计算机积极拒绝,无法连接;127.0.0.1:3456

    问题描述 最近Windows打完补丁,原来部署在本机的WCF无法连接:出现如下WCF错误:由于目标计算机积极拒绝,无法连接:127.0.0.1:3456 解决方案 检查一下本机的服务:NetTcpAc ...

  8. 题解 【POJ1934】 Trip

    题目意思: 有两个字符串(长度\(<=80\)),按字典序输出它们的最长公共子串的所有情况. 解析 最长公共子序列的长度应该都没问题了吧...有问题请自行百度 但关键是要求出每种情况,还要按字典 ...

  9. 一步一步理解线段树——转载自JustDoIT

    一步一步理解线段树   目录 一.概述 二.从一个例子理解线段树 创建线段树 线段树区间查询 单节点更新 区间更新 三.线段树实战 -------------------------- 一 概述 线段 ...

  10. tail命令:显示文件结尾的内容

    tail 命令和 head 命令正好相反,它用来查看文件末尾的数据,其基本格式如下:tail [选项] 文件名 选项 含义 -n K 这里的 K 指的是行数,该选项表示输出最后 K 行,在此基础上,如 ...