本篇文章小编给大家分享一下使用Spring Data Jpa查询全部并排序代码示例,文章代码介绍的很详细,小编觉得挺不错的,现在分享给大家供大家参考,有需要的小伙伴们可以来看看。
Spring Data Jpa查询全部并排序
1、Repository层只需要简单地extends JpaRepository
依旧不用写任何东西。因为它自己其实有一个findAll(Sort sort)的方法,直接用就可以了。
2、Service层中如下
ListxxxDOS = xxxRepository.findAll(new Sort(Sort.Direction.ASC,"属性名"));
但注意springboot2.2.1及以上的版本Sort的构造方法变为私有,需要像下面这样写:
ListxxxDOS = 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") ListstudentList;
2、对包含集合的实体进行排序:
String jql = "Select * from Bar as b order by b.id"; Query barQuery = entityManager.createQuery(jql); ListbarList = 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进行排序:
CriteriaQuerycriteriaQuery = 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分别按升序和降序排序:
CriteriaQuerycriteriaQuery = 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
忍者必须死34399账号登录版 最新版v1.0.138v2.0.72
下载勇者秘境oppo版 安卓版v1.0.5
下载忍者必须死3一加版 最新版v1.0.138v2.0.72
下载绝世仙王官方正版 最新安卓版v1.0.49
下载Goat Simulator 3手机版 安卓版v1.0.8.2
Goat Simulator 3手机版是一个非常有趣的模拟游
Goat Simulator 3国际服 安卓版v1.0.8.2
Goat Simulator 3国际版是一个非常有趣的山羊模
烟花燃放模拟器中文版 2025最新版v1.0
烟花燃放模拟器是款仿真的烟花绽放模拟器类型单机小游戏,全方位
我的世界动漫世界 手机版v友y整合
我的世界动漫世界模组整合包是一款加入了动漫元素的素材整合包,
我的世界贝爷生存整合包 最新版v隔壁老王
我的世界MITE贝爷生存整合包是一款根据原版MC制作的魔改整