详细分析MybatisPlus中的orderBy、orderByDesc、orderByAsc函数

目录

  • 前言
  • 1. 概念
  • 2. API示例
  • 3. 实战

前言

实战中学习并进行补充该类的源码以及应用

1. 概念

在 MyBatis-Plus 中,orderBy、orderByDesc 和 orderByAsc 是用于构建 SQL 查询语句中的 ORDER BY 子句的方法。

这些方法都是通过 QueryWrapper 类的实例来调用的,基础的只是可看我之前的文章:Springboot整合MybatisPlus的基本CRUD(全)

对应的源码如下:(此处的源码来源于Func.java类中)

default Children orderByAsc(R column) {return orderByAsc(true, column);}/*** ignore*/default Children orderByAsc(R... columns) {return orderByAsc(true, columns);}/*** 排序:ORDER BY 字段, ... ASC* <p>例: orderByAsc("id", "name")</p>** @param condition 执行条件* @param columns   字段数组* @return children*/default Children orderByAsc(boolean condition, R... columns) {return orderBy(condition, true, columns);}/*** ignore*/default Children orderByDesc(R column) {return orderByDesc(true, column);}/*** ignore*/default Children orderByDesc(R... columns) {return orderByDesc(true, columns);}/*** 排序:ORDER BY 字段, ... DESC* <p>例: orderByDesc("id", "name")</p>** @param condition 执行条件* @param columns   字段数组* @return children*/default Children orderByDesc(boolean condition, R... columns) {return orderBy(condition, false, columns);}/*** 排序:ORDER BY 字段, ...* <p>例: orderBy(true, "id", "name")</p>** @param condition 执行条件* @param isAsc     是否是 ASC 排序* @param columns   字段数组* @return children*/Children orderBy(boolean condition, boolean isAsc, R... columns);

对应的实现类大部分来源于如下:(AbstractWrapper类中)

    @Overridepublic Children orderBy(boolean condition, boolean isAsc, R... columns) {if (ArrayUtils.isEmpty(columns)) {return typedThis;}SqlKeyword mode = isAsc ? ASC : DESC;for (R column : columns) {doIt(condition, ORDER_BY, () -> columnToString(column), mode);}return typedThis;}
  • 第一个参数:执行条件,是否执行
  • 第二个条件:升降序,升序则为ASC,降序为DESC
  • 第三个条件:列属性

2. API示例

  • orderBy(fieldName):orderBy 方法用于指定按照某个字段进行排序,默认是升序排列。

通过指定字段名,生成 SQL 查询语句中的 ORDER BY 子句,用于排序结果集。

// 示例
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.orderBy("age");
  • orderByDesc(fieldName):orderByDesc 方法用于指定按照某个字段进行降序排序。

通过指定字段名,生成 SQL 查询语句中的 ORDER BY 子句,用于降序排序结果集。

// 示例
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.orderByDesc("age");
  • orderByAsc(fieldName):orderByAsc 方法用于指定按照某个字段进行升序排序。

通过指定字段名,生成 SQL 查询语句中的 ORDER BY 子句,用于升序排序结果集。

// 示例
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.orderByAsc("age");

这些方法都是用于构建查询条件的 Wrapper 对象,并且可以链式调用。下面是一个简单的示例,展示如何使用这些方法:

// 示例
public class MyBatisPlusExample {public static void main(String[] args) {// 创建 QueryWrapper 对象QueryWrapper<User> queryWrapper = new QueryWrapper<>();// 添加查询条件queryWrapper.eq("gender", "male").ge("age", 18).le("age", 30).orderByDesc("age");// 执行查询List<User> userList = userDao.selectList(queryWrapper);// 处理查询结果for (User user : userList) {System.out.println(user);}}
}

在上面的示例中,通过 queryWrapper.orderByDesc(“age”) 方法指定按照年龄字段降序排列结果集。这样,生成的 SQL 查询语句中就会包含 ORDER BY 子句,按照指定的条件排序查询结果。

3. 实战

假设数据表中的数据为:

在这里插入图片描述

实体类:

package com.example.demo.entity;import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;@Data
@AllArgsConstructor
@NoArgsConstructor
@TableName("test_user1")
public class User1 {@TableId(value = "id", type = IdType.AUTO)private int id;private String username;private int age;// 其他字段...
}

Mapper类为:

package com.example.demo.mapper;import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.example.demo.entity.User1;
import org.apache.ibatis.annotations.Mapper;@Mapper
public interface UserMapper1 extends BaseMapper<User1> {// 这里可以自定义一些查询方法
}

service类为:

package com.example.demo.service;import com.baomidou.mybatisplus.extension.service.IService;
import com.example.demo.entity.User1;public interface UserService1 extends IService<User1> {// 这里可以自定义一些业务方法
}

实现类为:

package com.example.demo.service.impl;import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.example.demo.entity.User1;
import com.example.demo.mapper.UserMapper1;
import com.example.demo.service.UserService1;
import org.springframework.stereotype.Service;@Service
public class UserServiceImpl1 extends ServiceImpl<UserMapper1, User1> implements UserService1 {// 这里可以实现自定义的业务方法
}

对应的测试类如下:

  • 将多个数据进行排序比较:
    @Testpublic void test16(){List<User1> user = userService1.list(new LambdaQueryWrapper<User1>().orderBy(true,false,User1::getAge,User1::getUsername));user.forEach(System.out::println);// 输出:// User1(id=3, username=user1, age=25)// User1(id=2, username=user1, age=19)// User1(id=4, username=user2, age=18)// User1(id=1, username=user1, age=18)}

截图如下所示:
(通过截图可以看出具体的顺序是怎样的,这有助于我们实战中的开发抽取某个类别!!请看下面的功能测试)

在这里插入图片描述

  • 如果有多个数据,可以获取最新一条数据:
    @Testpublic void test16(){User1 user = userService1.getOne(new LambdaQueryWrapper<User1>().eq(User1::getUsername,"user1").orderBy(true,false,User1::getAge).last("limit 1"));System.out.println(user);}

截图如下:(抽取最新的一条,从而忽略原先的数据,通过limit 1 加以配合限制)

在这里插入图片描述

对于orderByAsc以及orderByDesc,函数最后还是使用了orderBy,原理一致

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/596368.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Java】实验三 抽象类与接口

实验名称 实验三 抽象类与接口 实验目的 1. 深刻理解抽象类、接口的意义。 2. 熟练掌握抽象类和接口的定义、继承抽象类以及实现接口的方法。 3. 理解和掌握多态。 实验内容 &#xff08;一&#xff09;抽象类实验&#xff1a;项目源码中新建一个ahpu.shape的包&a…

低代码:实现数据可视化的强大助手

随着数据在企业中的价值越来越受到重视&#xff0c;数据可视化成为了决策者和业务专家们必备的工具。然而&#xff0c;传统的数据可视化开发过程常常繁琐且耗时&#xff0c;限制了其在应用中的广泛应用。低代码平台的出现&#xff0c;为实现高效的数据可视化提供了新的解决方案…

切换node.js不同版本

切换node.js不同版本 因新项目用到vite4创建项目&#xff0c;输入命令后报错&#xff0c;经查询得知是node版本过低导致&#xff0c;所以需要升级node版本&#xff0c;但是又有老的项目需要维护&#xff0c;因此需要多个版本的node使用需求。 流程&#xff1a; 卸载原有的node…

实验笔记之——Linux实现COLMAP

之前博客跑instant-NGP的时候&#xff0c;除了用官方的数据集&#xff0c;用自己的数据则是通过手机采集&#xff0c;同时获得pose与image。但是这种获取的方式对于3D gaussian而言&#xff0c;并不支持对应的数据格式&#xff0c;为此采用COLMAP来根据image获取pose&#xff0…

Python条件语句与运算符优先级详解,python学习必看

文章目录 Python 条件语句Python运算符优先级关于Python技术储备一、Python所有方向的学习路线二、Python基础学习视频三、精品Python学习书籍四、Python工具包项目源码合集①Python工具包②Python实战案例③Python小游戏源码五、面试资料六、Python兼职渠道 Python 条件语句 …

springcloud之集成nacos config

写在前面 源码 。 本文看下如下集成nacos config组件。 1&#xff1a;常见配置方式分析 我们先来看下常见的配置方式都有哪些&#xff0c;以及其有什么优点和缺点。 硬编码 优点&#xff1a;hardcode&#xff0c;除了开发的时候快些&#xff0c;爽一下&#xff0c;有个屁优…

洗地机什么牌子最好?家用洗地机推荐指南

随着人们对健康和卫生的关注日益增长&#xff0c;洗地机成为了现代家庭清洁的必备工具。然而&#xff0c;在市场上琳琅满目的洗地机品牌中&#xff0c;洗地机哪个品牌最好最实用呢?这是消费者最为关心的问题。现本文将为您介绍几个备受推崇的洗地机品牌&#xff0c;帮助您在众…

Linux进程以及计划任务

一&#xff1a;程序&#xff1a; 1.什么是程序&#xff1f; 执行特定任务的一串代码 &#xff0c;是一组计算机能识别和执行的指令&#xff0c;运行于电子计算机上&#xff0c;满足人们某种需求的信息化工具 用于描述进程要完成的功能&#xff0c;是控制进程执行的指令集 二…

论文查重降重写成大白话可以吗

大家好&#xff0c;今天来聊聊论文查重降重写成大白话可以吗&#xff0c;希望能给大家提供一点参考。 以下是针对论文重复率高的情况&#xff0c;提供一些修改建议和技巧&#xff0c;可以借助此类工具&#xff1a; 论文查重降重&#xff1a;用大白话解析 一、引言 写论文是每个…

进程的韵律:探索计算机世界中的动态舞台

这里写目录标题 进程定义进程的组成进程与程序区别进程与线程区别进程特点进程控制结尾 进程定义 进程&#xff1a;一个具有一定功能的程序在一个数据集合上的一次动态执行过程。 进程是指正在运行的程序&#xff0c;它是操作系统进行资源分配和调度的基本单位。在计算机中&…

红日靶场第一关 attck

之前因为事情耽搁了&#xff0c;今天争取把第一关红日靶场完成 目前找到了关于外网服务器的网址 之前有过扫描目录得知了登陆界面 和爆破得到的密码 目前我们的想法是把病毒上传到网页当中&#xff0c;所以我们应该找个文件注入点 但是再次之前 我们需要找到网页的绝对路径 …

生成式AI:软件工程的未来伙伴

随着技术不断进步&#xff0c;软件工程正在经历一场革命性的变革。从最初的穿孔卡片和汇编语言编程&#xff0c;到现代集成开发环境和高级编程语言&#xff0c;软件工程已经走过了一条漫长的路。现在&#xff0c;生成式人工智能(AI)正打开新的篇章&#xff0c;不仅对传统的编码…

解决SyntaxError: future feature annotations is not defined,可适用其他包

方法&#xff1a;对报错的包进行降级 pip install tikzplotlib0.9.8site-packages后面是使用pip install安装的包&#xff0c;根据这个找到报错的包 想法来源&#xff1a; 环境是python3.6&#xff0c;完全按照作者要求进行环境配置&#xff0c;但仍报错。 我在网上找的解决…

当AI遇见大脑:电脑与人脑协同“进化”

编者按&#xff1a;2023年是微软亚洲研究院建院25周年。借此机会&#xff0c;我们特别策划了“智启未来”系列文章&#xff0c;邀请到微软亚洲研究院不同研究领域的领军人物&#xff0c;以署名文章的形式分享他们对人工智能、计算机及其交叉学科领域的观点洞察及前沿展望。希望…

FFmpeg之——获取上传视频的尺寸(长、宽)

获取上传视频的尺寸&#xff1a; 获取视频尺寸通常需要借助第三方库FFmpeg。 首先&#xff0c;确保你的系统中已安装了FFmpeg&#xff0c;并且FFmpeg的可执行文件路径已经添加到你的系统环境变量中。 1.官网下载ffmpeg 进入 链接: ffmpeg官网 网址&#xff0c;点击下载wind…

架构设计系列9,10

架构设计系列9&#xff1a;前端架构和后端架构的区别 前端架构和后端架构都是软件系统中最关键的架构层&#xff0c;负责处理不同方面的任务和逻辑&#xff0c;两者之间是存在一些区别和联系的&#xff0c;我会从以下几个方面来阐述&#xff1a; 定位和职责 ● 前端架构主要…

一文解释Linux的内存分页管理

内存是计算机的主存储器。内存为进程开辟出进程空间&#xff0c;让进程在其中保存数据。我将从内存的物理特性出发&#xff0c;深入到内存管理的细节&#xff0c;特别是了解虚拟内存和内存分页的概念。 内存 简单地说&#xff0c;内存就是一个数据货架。内存有一个最小的存储…

书客、孩视宝、明基护眼台灯好不好用?护眼灯测评对比!

现在一些家长对自家孩子的健康也是特别的重视&#xff0c;从小时开始的儿童枕&#xff1b;再到保护眼睛的护眼台灯、OK眼镜&#xff1b;再到青少年时期的生长激素...可以说是穷出不尽&#xff0c;但是关于孩子使用的东西又不能马虎&#xff0c;每次要帮孩子选东西的时候可是一阵…

四川思维跳动商务信息咨询有限公司电商服务怎么样

随着电商行业的迅猛发展&#xff0c;越来越多的企业开始寻求专业的电商服务以提升自身竞争力。四川思维跳动商务信息咨询有限公司作为一家专注于电商服务的公司&#xff0c;凭借其卓越的服务品质和创新能力&#xff0c;已经在业内树立了良好的口碑。本文将为您详细解析四川思维…

办公宝典:兼具多功能的4大办公软件app推荐!

现在&#xff0c;随着全球化和互联网的发展&#xff0c;团队协作成为企业成功的关键所在。在这个环境中&#xff0c;协同办公软件成为无法离开的工具。 在市面上&#xff0c;有很多种协同办公软件可供选择。这里介绍4款与协同办公密切相关的软件&#xff0c;它们提供了许多功能…