MySQL 按照数据库表字段动态排序 查询列表信息
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 按照数据库表字段动态排序 查询列表信息的更多相关文章
- 关于解决SpringDataJpa框架实体类表字段创建顺序与数据库表字段展示顺序不一致的问题
今天在公司的项目开发中,遇到一个问题: 后端对象实体类中写入字段顺序与数据库中的存储顺序不一致. 仔细观察到数据库中的表字段的排序方式是按照拼音字母的顺序abcdef......来存储的 而我的实体类 ...
- mysql中修改表字段名/字段长度/字段类型详解
在mysql中我们对数据表字段的修改命令只要使用alter就可以了,下面我来给大家详细介绍mysql中修改表字段名/字段长度/字段类型等等一些方法介绍,有需要了解的朋友可参考. 先来看看常用的方法 M ...
- Java之数据库表字段有关键字报错java.sql.SQLSyntaxErrorException
前两天在开发中遇到一个坑,本来我在快乐的做着增删改查,然后悲剧发生了,在查询数据库的过程中,报了java.sql.SQLSyntaxErrorException: 经过排查,是因为数据库表字段中存在关 ...
- mysql 批量修改 表字段/表/数据库 字符集和排序规则
今天接到一个任务是需要把数据库的字符编码全部修改一下,写了以下修正用的SQL,修正顺序是 表字段 > 表 > 数据库. 表字段修复: #改变字段数据 SELECT TABLE_SCHE ...
- mysql 数据库 表字段添加表情兼容
项目中的几个需要支持Emoji表情符号,手机自带的表情,其实添加也很简单: 1 修改数据库 配置my.cnf init-connect='SET NAMES utf8mb4' ...
- mysql数据库表字段使用DESC等关键字报错及解决方法
<!-- desc是MySQL数据库的关键字,作为字段名直接使用会报错 --><sql id="Base_Column"> id,mol,ip,port,n ...
- MySQL查询表与表字段的信息
环境: Mysql数据库 库名:db_name 表名: table_name1 table_name2 查询一个里面所有表的信息: use information_scheam; select * f ...
- mysql 两张表字段模糊匹配--字符串拼接函数
concat(A,B,C,...) 拼接字符串 例如concat('123','***','345') =>123***345 SELECT concat( substr(t1.CODE, ...
- mysql创建外键出错(注意数据库表字段排序)
1. 两个字段的类型或者大小不严格匹配.例如,如果一个是int(10),那么外键也必须设置成int(10),而不是int(11),也不能是tinyint.另外,你还必须确定两个字段是否一个为 sig ...
随机推荐
- Linux FTP 命令全集
Linux FTP 命令全集 1 前言 下面就所有命令给出解释和例子. 说明: 1. remote-file 指远程文件,即服务器上的文件 2. local-file 指本地文件,即本地机器上的文 ...
- cubase 的 CC控制器使用
- 生产者消费者问题--lock
# 代码: public class App { public static void main(String[] args) { Depot depot = new Depot(100); Prod ...
- BZOJ 1003 最短路dp
物流公司要把一批货物从码头A运到码头B.由于货物量比较大,需要n天才能运完.货物运输过程中一般要转停好几个码头.物流公司通常会设计一条固定的运输路线,以便对整个运输过程实施严格的管理和跟踪.由于各种因 ...
- spring boot 导出 jar 配置文件的问题
网上有很多关联映射及讲解,想要说的是 主要就是 classpath 加上的话 jar就可以找到了
- 【技巧 二进制分组】bzoj4398: 福慧双修&&2407: 探险
二进制分组也可以说是一种比较优美的拆贡献方式吧? Description 菩萨为行,福慧双修,智人得果,不忘其本.——唐朠立<大慈恩寺三藏法师传>有才而知进退,福慧双修,这才难得.——乌雅 ...
- BZOJ1821 部落划分[最小生成树]
方法一:套路性的,二分距离,然后把距离点对距离小于答案的边都联通起来,然后看集合数量超过k说明答案小,增大,否则减小. 方法二:贪心,类kruskal.n个点,k个连通块,则需要有效连接(同一个块内的 ...
- timestamp和datetime
datetime数据类型在MySQL之前占8个字节,5.6之后占5个字节,datetime的范围1000-01-01 00:00:00------9999-12-31 23:59:59,格式采用YYY ...
- (web)个人项目(挖宝网)
前台:使用bootstrap. 后台:使用layui. 数据库:mysql 下载地址:https://github.com/oukele/wabaowangDemo(数据库文件忘记上传,我在展示功能结 ...
- PHP类知识----面向对象在内存空间的分布情况