首页 > 其他分享 >mybatis实现多字段动态排序

mybatis实现多字段动态排序

时间:2023-09-20 15:01:57浏览次数:38  
标签:res SortFieldPair add fieldName mybatis new 排序 多字段

背景

在复杂项目中,可能会对数据表多个字段进行排序,不理解的话可结合需求看。

需求

现在有一张User表

男同学先按age降序排序,后按height降序排序,最后按id升序排序
女同学先按age升序排序,后按weight降序排序,最后按id升序排序

不合理?现实可能就是这么的不合理。

实现

  1. 排序对(字段名,排序类型)
    @Data
    public class SortFieldPair{
        private String fieldName;
        private String sortType;
    
        public SortFieldPair(String fieldName, String sortType) {
            this.fieldName = fieldName;
            this.sortType = sortType;
        }
    }
    
  2. 根据策略构建排序对
    private List<SortFieldPair> buildUserSortList(UserSearchParam userSearchParam) {
            List<SortFieldPair> res = new ArrayList<>();
            if(userSearchParam.getSex=="man"){
                res.add(new SortFieldPair("age", SortOrder.DESC.toString()));
                res.add(new SortFieldPair("height", SortOrder.DESC.toString()));
            }else if (userSearchParam.getSex=="woman") {
                res.add(new SortFieldPair("age", SortOrder.ASC.toString()));
                res.add(new SortFieldPair("weight", SortOrder.DESC.toString()));
            }
            res.add(new SortFieldPair("id", SortOrder.ASC.toString()));
            return res;
        }
    
  3. dao
    List<UseroVO>  queryListByParam(@Param("sortFieldList")List<SortFieldPair> sortFieldPairs, @Param("start") int start, @Param("limit") Integer limit);
    
  4. mapper

    注意使用的是${},#{}会为表字段加 '' 变为字符串,(eg. name => 'name' ),导致失效。具体可看: https://blog.csdn.net/LitongZero/article/details/83753327

    <select id="queryListByParam" resultType="com.tao.vo.result.UserVO">
            select *
            FROM sys_user
            WHERE is_del=0
            <foreach collection="sortFieldList" item="sortField" open="order by " separator="," close=" ">
                ${sortField.fieldName} ${sortField.sortType}
            </foreach>
            LIMIT #{limit} OFFSET #{start}
        </select>
    

标签:res,SortFieldPair,add,fieldName,mybatis,new,排序,多字段
From: https://www.cnblogs.com/handsometaoa/p/17717317.html

相关文章

  • Sql Server分组排序及生成序列号
    1--1.分组排序2SELECT*,ROW_NUMBER()OVER(PARTITIONBY@fileName,@fileName1ORDERBYIDDESC)ASrowNumFROM@tableName34--2.生成序列号5SELECT*,ROW_NUMBER()over(orderbyidASC)ASrowNumFROM@tableName 翻译搜索复制......
  • Mybatis大于、小于....转义写法
    描述转义前转义后大于>&gt;大于等于>=&gt;=小于<&lt;小于等于<=&lt;=和&&amp;单引号'&apos;双引号"&quot;......
  • 软件测试|Python如何将列表从大到小排序
    简介在编程中,对列表进行排序是一个常见的操作,有时候我们需要将列表按照从大到小的顺序进行排列。Python提供了多种方法来实现这一目标。在本文中,我们将深入探讨几种将列表从大到小排序的方法,帮助您根据不同情况选择最合适的方式。使用sorted()函数Python的sorted()函数可以接收一......
  • Mybatis 05 注解实现增删改查
    UserMapperpublicinterfaceUserMapper{/*注解实现增删改查*/@Select("select*fromtb_user")List<User>selectAll2();@Insert("insertintotb_uservalues(null,#{username},#{password},#{gender},#{addr})")voidinsert......
  • Mybatis 04 一对一,一对多,多对多关联映射
    一对一一个员工对应一个部门实体类emppackagecom.entity;importjava.io.Serializable;importjava.math.BigDecimal;publicclassEmpVoimplementsSerializable{privateIntegerempno;privateStringename;privateStringjob;privateInte......
  • 表格的自定义排序 编辑 拖拽 缩放
    终于能闲下来做点自己想做的事情了.. 简单表格排序  可以双击编辑自定义编辑后的规则 可拖动列进行列替换 可推动边框进行列宽度的缩放  ie6下中文不自动换行 非ie下字母和数字也不自动换行确实让人恼火 chrome浏览器下点击运行好像问题很大 拿到本地测试会比较好<!......
  • 冒泡排序
    importjava.util.Arrays;publicclassarrayDemo7{publicstaticvoidmain(String[]args){int[]arrays={5,2,3,1,4,6};sortArrays(arrays);System.out.println(Arrays.toString(arrays));}publicstaticint[]sortArrays(int[]arrays){for(intlength=ar......
  • 十大排序算法总结及其Java代码实现
    概述基于比较的排序算法,常见的有以下几种算法最好最坏平均空间稳定性思想注意事项冒泡排序O(n)O(n^2)O(n^2)O(1)是比较最好情况需要额外判断选择排序O(n^2)O(n^2)O(n^2)O(1)否比较顺序选择元素,交换次数较多,不适合大规模数据堆排序O(nlogn)O(nlogn)O(nlogn)O(1)否选择需要使用到数据......
  • MyBatis中#和$的区别
    MyBatis中#{}和${}的用法说一下为什么要写这篇文章,最近面试有被问到,一下子想不出来有啥区别,想记录一下加深自己的理解,同时自己也经常用MyBatis-Plus忽略了XML文件的编写和使用,所以需要加深一下这块的知识一、例子1、#{}将传入的数据当作一个字符串,会对传入的数据加上一个双......
  • 基数排序(这里假设数据的最高位为3)
    基本思想:在需要排序的一串数据中,取最长位数为参考,不足最长位数的数据要在前面补零,然后形成一串相同位数的数据,最后通过比较这串数据的个位数,十位数,百位数….最后就会得到一个有序的序列。用Java实现如下所示:importjava.util.Arrays;publicclassTest1{publicstaticvo......