广告
返回顶部
首页 > 资讯 > 后端开发 > Python >使用Spring Data Jpa查询全部并排序
  • 388
分享到

使用Spring Data Jpa查询全部并排序

2024-04-02 19:04:59 388人浏览 安东尼

Python 官方文档:入门教程 => 点击学习

摘要

目录springDataJpa查询全部并排序1、Repository层只需要简单地extendsJpaRepository2、Service层中如下JPA之排序问题1、总览2、使用J

Spring Data Jpa查询全部并排序

1、Repository层只需要简单地extends JpaRepository

依旧不用写任何东西。因为它自己其实有一个findAll(Sort sort)的方法,直接用就可以了。

2、Service层中如下


List<xxxDO> xxxDOS = xxxRepository.findAll(new Sort(Sort.Direction.ASC,"属性名"));

但注意SpringBoot2.2.1及以上的版本Sort的构造方法变为私有,需要像下面这样写:


List<xxxDO> xxxDOS = xxxRepository.findAll(Sort.by(Sort.Direction.ASC,"属性名"));

JPA之排序问题

1、总览

本文将要探讨的是用于Java Persistence API(JPA)排序的各种实现方式,它们适用于简单实体以及一对多关系中的实体。这些方法将排序工作的负担委托给数据库层。

2、使用JPA / JQL API排序

通过使用Order By关键词实现JQL排序:


String jql ="Select * from Student order by id";
Query query = entityManager.createQuery (jql);

基于上面的查询,JPA生成如下简单的sql语句:


Hibernate: select * from Student order by id

注:JQL字符串中的SQL关键字不区分大小写,但是实体的名称及其属性是区分的(实体:Student、属性:id)。

2.1、设置排序顺序

默认情况下,排序顺序是升序的,但是可以在JQL字符串中显式设置。就像在纯SQL中一样,排序选项是asc和desc:


String jql = "Select * from Student order by id desc";
Query sortQuery = entityManager.createQuery(jql);

其生成的SQL查询将会包括排序的升降方向:


Hibernate: select * from Student order by id desc

2.2、按两个及以上的属性个数排序

为了按多个属性排序,会将需要排序的属性都添加到JQL字符串的order by子句中:


String jql="Select * from Student Order by name asc,id desc";
Query sortQuery = entityManager.createQuery(jql);

同样的排序条件将会出现在生成的SQL查询语句中:


Hibernate: select * from Student order by name asc,id desc

注:对于多属性排序,优先排第一个属性,当第一个值相同时在按照第二个属性进行排序,以此类推。

2.3、设置空值的排序优先级

默认的空值优先级是在数据库中特定了的,但这可以通过HQL查询字符串中的NULLS FIRST或NULLS LAST子句进行自定义。

举一个简单的示例–按Student的name属性降序排列,并将Nulls放在末尾:


Query sortQuery = entityManager.createQuery
  ("Select * from Student order by name desc NULLS LAST");

那么,其生成的SQL查询将是如下情况:


Hibernate: select * from Student order by case when name is null then 1 else 0 end, desc

2.4、一对多关系排序

超越基本示例,现在看一个用例,该用例涉及以一对多关系对实体进行排序– Bar包含Student实体的集合。我们要对Bar实体及其Student实体的集合进行排序-JPA对于此任务特别简单:

1、对集合进行排序:在Bar实体的Student集合上添加一个@OrderBy注解:


@OrderBy("name ASC")
List <Student> studentList;

2、对包含集合的实体进行排序:


String jql = "Select * from Bar as b order by b.id";
Query barQuery = entityManager.createQuery(jql);
List<Bar> barList = barQuery.getResultList();

注:此处使用了@OrderBy注解的原因是:我们要对每个Bar的Student集合进行排序。

接下来看一下以上JQL对应的SQL语句吧:


Hibernate: select * from Bar b order by b.id
Hibernate: 
select * from Student slist where slist.bar_id=? order by slist.name asc

第一个查询对父Bar实体进行排序。生成第二个查询以对属于Bar的子Student实体的集合进行排序。

3、使用JPA条件查询对象API进行排序

使用JPA Criteria – orderBy方法是设置所有排序参数的“一站式”选择:可以设置排序方向和排序依据。以下是该方法的API:

orderBy(CriteriaBuilder.asc):升序排序。 orderBy (CriteriaBuilder.desc): 降序排序。

每个Order实例都是通过CriteriaBuilder对象的asc或desc方法创建的.

这是一个简单的示例-按名称对Student进行排序:


CriteriaQuery<Student> criteriaQuery = criteriaBuilder.createQuery(Student.class);
Root<Student> from = criteriaQuery.from(Student.class);
CriteriaQuery<Student> select = criteriaQuery.select(from);
criteriaQuery.orderBy(criteriaBuilder.asc(from.get("name")));

get方法的参数区分大小写,因为它需要与属性名称匹配。

与简单的JQL相反,JPA条件查询对象API会在查询中强制使用明确的顺序方向。注意,在此代码片段的最后一行中,criteriaBuilder对象通过调用其asc方法指定了升序排列。

执行上述代码后,JPA会生成如下所示的SQL查询。 JPA Criteria Object生成带有显式asc子句的SQL语句:


Hibernate: select * from Student order by asc

3.1、按两个及以上的属性个数排序

要对多个属性进行排序,只需将Order实例传递给orderBy方法,以对每个属性进行排序。 这是一个简单的示例-按名称和ID分别按升序和降序排序:


CriteriaQuery<Student> criteriaQuery = criteriaBuilder.createQuery(Student.class);
Root<Student> from = criteriaQuery.from(Student.class); 
CriteriaQuery<Student> select = criteriaQuery.select(from); 
criteriaQuery.orderBy(criteriaBuilder.asc(from.get("name")),
    criteriaBuilder.desc(from.get("id")));

相应的SQL查询如下所示:


Hibernate: select * from Student order by name asc,id desc

以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程网。

--结束END--

本文标题: 使用Spring Data Jpa查询全部并排序

本文链接: https://www.lsjlt.com/news/157858.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 使用Spring Data Jpa查询全部并排序
    目录SpringDataJpa查询全部并排序1、Repository层只需要简单地extendsJpaRepository2、Service层中如下JPA之排序问题1、总览2、使用J...
    99+
    2022-11-12
  • 如何使用Spring Data Jpa查询全部并排序
    这篇文章将为大家详细讲解有关如何使用Spring Data Jpa查询全部并排序,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。Spring Data Jpa查询全部并排序1、Repository层只需要简...
    99+
    2023-06-25
  • Spring Data JPA 如何使用QueryDsl查询并分页
    目录SpringDataJPA使用QueryDsl查询并分页使用QueryDSLSpring Data JPA 使用QueryDsl查询并分页 QProblemPoint qP...
    99+
    2022-11-12
  • Spring Data JPA怎么使用QueryDsl查询并分页
    小编给大家分享一下Spring Data JPA怎么使用QueryDsl查询并分页,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!Spring Data JPA 使用QueryDsl查询并分页 QProblemPo...
    99+
    2023-06-25
  • 在Spring Boot中使用Spring-data-jpa实现分页查询
    在我们平时的工作中,查询列表在我们的系统中基本随处可见,那么我们如何使用jpa进行多条件查询以及查询列表分页呢?下面我将介绍两种多条件查询方式。1、引入起步依赖   <dependency> <gro...
    99+
    2023-05-31
    spring boot data
  • Spring Data Jpa 中原生查询 REGEXP 的使用详解
    目录Spring Data Jpa原生查询 REGEXP 的使用spring data jpa 原生查询(查一个json中的某一字段)Spring Data Jpa原生查询 REGE...
    99+
    2022-11-12
  • 使用Spring Data JPA如何实现自定义规则查询
    使用Spring Data JPA如何实现自定义规则查询?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。一、常用规则速查1   And    并且2   Or    &nbs...
    99+
    2023-05-31
    spring data jpa
  • Spring Data JPA使用JPQL与原生SQL进行查询的操作
    1、使用JPQL语句进行查询 JPQL语言(Java Persistence Query Language)是一种和SQL非常类似的中间性和对象化查询语言,它最终会被编译成针对不同底...
    99+
    2022-11-12
  • 使用Spring Data JPA如何实现多条件的分页查询
    使用Spring Data JPA如何实现多条件的分页查询?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。话不多说,请看代码:public Map<String, Obje...
    99+
    2023-05-31
    spring 分页查询 dat
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作