千家信息网

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

发表于:2025-02-22 作者:千家信息网编辑
千家信息网最后更新 2025年02月22日,这篇文章将为大家详细讲解有关如何使用Spring Data Jpa查询全部并排序,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。Spring Data Jpa查询全部
千家信息网最后更新 2025年02月22日如何使用Spring Data Jpa查询全部并排序

这篇文章将为大家详细讲解有关如何使用Spring Data Jpa查询全部并排序,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

Spring Data Jpa查询全部并排序

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

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

2、Service层中如下

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

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

List 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  studentList;

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

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

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

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

Hibernate: select * from Bar b order by b.idHibernate: 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 criteriaQuery = criteriaBuilder.createQuery(Student.class);Root from = criteriaQuery.from(Student.class);CriteriaQuery 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 criteriaQuery = criteriaBuilder.createQuery(Student.class);Root from = criteriaQuery.from(Student.class); CriteriaQuery 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

关于"如何使用Spring Data Jpa查询全部并排序"这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。

排序 查询 属性 实体 方法 生成 升序 名称 字符 字符串 对象 示例 语句 子句 方向 条件 篇文章 顺序 两个 个数 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 商品期权下单软件开发 无线传感器网络安全性问题 色弱色弱可以做软件开发吗 哪家app软件开发的公司好 小米链——互联网科技公司 学网络技术 阿里云手机服务器远程用户名密码 为什么软件开发上班时间晚 济南房联汇网络技术有限公司 am服务器管理模式在哪 数据与事实性数据库的特点 城口网络安全审计系统咨询辅导 亳州安卓软件开发需要多少钱 数据库无损连接 靠谱云服务器招商项目平台 电信网络安全百度百科 江苏质量网络技术咨询 网站服务器管理和维护 十个有用的软件开发原则 温州软件开发学 es代替数据库搜索 安徽电脑软件开发哪家便宜 晋中软件开发怎么样 我的世界服务器10m宽带 数据库一对多是什么意思 河北智慧景区软件开发公司 软件开发的算法设计区别 关于湘西网络安全 上交所行情接收服务器 武清区信息网络技术创造辉煌
0