zoukankan      html  css  js  c++  java
  • 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"
    }

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

  • 相关阅读:
    [LeetCode] Remove Duplicates from Sorted List
    [LeetCode] Substring with Concatenation of All Words
    [LeetCode] Partition List
    [LeetCode] Reverse Nodes in kGroup
    [LeetCode] Remove Duplicates from Sorted List II
    [LeetCode] Reverse Linked List II
    [LeetCode] Text Justification
    [LeetCode] Swap Nodes in Pairs
    (转)介绍下Nuget在传统Asp.net项目中的使用
    Entity Framework中的Migrations
  • 原文地址:https://www.cnblogs.com/miracle-luna/p/11360117.html
Copyright © 2011-2022 走看看