首页 > 其他分享 >MyBatis-Plus中使用order by排序处理null值字段的排序

MyBatis-Plus中使用order by排序处理null值字段的排序

时间:2023-01-28 14:24:13浏览次数:59  
标签:值字 00 null NULL update sys time 排序 id

目录

前提

SQL ORDER BY 子句用于根据一个或者多个字段对查询结果(结果集)进行排序,可以是降序,也可以是升序。
其中 ASC 关键字表示升序,DESC 关键字表示降序;如果不写,数据库默认为 ASC。
当我们使用 order by 对某一字段进行排序时,该字段中包含null值,这种情况下,排序就会出现问题,我们可以根据实际情况,指定为空的排在前面或者排在后面

示例转载自其他博客:博客地址

准备数据

  1. 建表
CREATE TABLE `sys_user` (
  `id` bigint NOT NULL AUTO_INCREMENT COMMENT '用户id',
  `username` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '用户名',
  `password` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '密码',
  `create_time` datetime DEFAULT NULL COMMENT '创建时间',
  `update_time` datetime DEFAULT NULL COMMENT '修改时间',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=28 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci ROW_FORMAT=DYNAMIC COMMENT='用户信息表';
  1. 初始化sql语句
INSERT INTO `test`.`sys_user`(`id`, `username`, `password`, `create_time`, `update_time`) VALUES (1, 'A', 'A', '2022-01-01 00:00:00', '2022-01-01 00:00:00');
INSERT INTO `test`.`sys_user`(`id`, `username`, `password`, `create_time`, `update_time`) VALUES (2, 'B', 'B', '2022-02-01 00:00:00', '2022-02-01 00:00:00');
INSERT INTO `test`.`sys_user`(`id`, `username`, `password`, `create_time`, `update_time`) VALUES (3, 'C', 'C', '2022-03-01 00:00:00', '2022-03-01 00:00:00');
INSERT INTO `test`.`sys_user`(`id`, `username`, `password`, `create_time`, `update_time`) VALUES (4, 'D', 'D', '2022-04-01 00:00:00', NULL);
INSERT INTO `test`.`sys_user`(`id`, `username`, `password`, `create_time`, `update_time`) VALUES (5, 'E', 'E', '2022-05-01 00:00:00', NULL);

示例

sql 排序方式 结果
SELECT id, update_time FROM sys_user; 数据库默认排序 结果一
SELECT id, update_time FROM sys_user ORDER BY update_time ASC; 按照update_time升序, NULL的排到最前 结果二
SELECT id, update_time FROM sys_user ORDER BY IF(isnull(update_time),1,0), update_time ASC; 按照update_time升序, NULL的排到最后 结果三
SELECT id, update_time FROM sys_user ORDER BY update_time DESC; 按照update_time降序, NULL的排到最后 结果四
SELECT id, update_time FROM sys_user ORDER BY IF(isnull(update_time),0,1) ,update_time DESC; 按照update_time降序, NULL的排到最前 结果五

MyBatis-Plus中使用LambdaQueryWrapper处理空值排序

需求:按照时间倒序排序,空的放到最前面

# 改动前,空的放到最后面去了
List<SysUser> sysUsers = userService.list(Wrappers.<SysUser>lambdaQuery()
.orderByDesc(SysUser::getUpdateTime));

# 改动后
List<SysUser> sysUsers = userService.list(Wrappers.<SysUser>lambdaQuery()
.last("ORDER BY IF(isnull(update_time),0,1), update_time DESC"));

建议:非必要不要用为空的字段做排序

标签:值字,00,null,NULL,update,sys,time,排序,id
From: https://www.cnblogs.com/sudokill/p/16985412.html

相关文章

  • 10 排序 | 数据结构与算法
    1.排序概述1.排序的概念排序:将一组杂乱无章的数据排列成一个按关键字有序的序列数据表:待排序数据对象的有限集合关键字:通常数据对象有多个属性域,即多个数据成员组成......
  • 冒泡排序
    冒泡排序是通过比较相邻两个值,如果发生逆序则进行交换,从而使小的值一直往上冒,或者大的值一直往下沉。代码实现#-*-coding=utf-8-*-#@Author:......
  • 08 冒泡排序
    冒泡排序代码packagecom.zhan.base04Array;publicclassTest08{publicstaticvoidmain(String[]args){int[]a={1,5,3,8,6};sort(a);......
  • LeetCode三数之和(vector/排序+双指针)
    原题解题目约束解法classSolution{public:vector<vector<int>>threeSum(vector<int>&nums){intn=nums.size();sort(nums.begin......
  • 拓扑排序
    拓扑排序是一种图论算法,它用于对有向无环图(DAG)进行排序。该算法的目的是找到图中所有顶点的线性排列,使得对于图中的任意两个顶点u和v,如果存在一条从u到v的边,那么在......
  • MySQL基础篇(运算符、排序分页、多表查询、函数)
    MySQL基础篇​​数据库概述​​​​数据库与数据库管理系统​​​​数据库与数据库管理系统的关系​​​​Mysql介绍​​​​RDBMS与非RDBMS​​​​关系型数据库(RDBMS)......
  • 83. 删除排序链表中的重复元素
    题目描述给定一个已排序的链表的头head,删除所有重复的元素,使每个元素只出现一次。返回已排序的链表。方法1双指针方式描述指针p去找寻是否为相同的节点如果......
  • 前端小技巧之 --- 【对象数组分类并排序】
    当前需求是:把下面的数组,按照index值分类,再按照字母顺序排序exportconstsingerList=[{id:0,index:'Z',name:'周杰伦'},{id:1,index:'X',......
  • 排序
    快速排序#include<iostream>usingnamespacestd;intnums[100];voidquicksort(intnum[],intleft,intright){if(left>=right)return;inttarge......
  • C#中检查null的语法糖,非常实用
    c#处理null的几个语法糖,非常实用。(尤其是文末Dictionary那个案例,记得收藏)??如果左边是的null,那么返回右边的操作数,否则就返回左边的操作数,这个在给变量赋予默认值非常好用......