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

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

本文将详细解释如何使用Spring Data Jpa来查询所有数据并对它们进行排序。边肖觉得挺实用的,分享给大家参考。希望你看完这篇文章能有所收获。

00-1010

Spring Data Jpa查询全部并排序

还是不用写什么。因为它实际上有一个findAll(Sort sort)方法,直接使用就可以了。

00-1010 list xxxdoxx dos=xxxrepository . find all(新排序(sort.direction.asc,'属性名'));但是,请注意,springoot 2 . 2 . 1及更高版本中的Sort的构造方法变为私有,需要编写如下:

list xxxdoxx dos=xxxrepository . find all(sort . by(sort . direction . ASC,' attribute name '));00-101010

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

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

00-1010使用排序依据关键字的JQL排序:

stringjql=' Select * frostudentorderbyid ';

query query=entitymanager . createquery(jql);基于上述查询,JPA生成以下简单的SQL语句:

hibernate : Select * frostudentorderbyid注意:JQL字符串中的SQL关键字不区分大小写,但是实体名称及其属性是有区别的(实体:student,属性:id)。

2.1、设置排序顺序

默认情况下,排序顺序是升序,但可以在JQL字符串中明确设置。在纯SQL中,排序选项是asc和desc:

stringjql=' Select * frostudentorderbyiddesc ';

QuerysortQuery=entitymanager . createquery(jql);生成的SQL查询将包括排序的升序和降序:

休眠:从学生订单中选择* iddesc2.2、按两个及以上的属性个数排序

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

stringjql=' Select * frostudentorderbynamasc,iddesc ';

QuerysortQuery=entitymanager . createquery(jql);相同的排序条件将出现在生成的SQL查询语句中:

hibernate : Select * frostudentorderbyname sc,IDdesc注意:对于多属性排序,第一个属性优先,当第一个值相同时,第二个属性用于排序,以此类推。

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

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

举个简单的例子——按照学生的姓名属性降序排列,并在末尾加上空值:

ss="brush:sql;">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

关于“如何使用Spring Data Jpa查询全部并排序”这篇文章就分享到这里了,希望

内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/110317.html

(0)

相关推荐

  • 如何分析Vue2cube-ui时间选择器

    技术怎么解析Vue2 cube-ui时间选择器这篇文章给大家介绍怎么解析Vue2 cube-ui时间选择器,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。前言vue2 整合 cube-ui 时间选择器

    攻略 2021年12月20日
  • 数据库迁移如此复杂的原因是什么

    技术数据库迁移如此复杂的原因是什么这篇文章主要介绍“数据库迁移如此复杂的原因是什么”,在日常操作中,相信很多人在数据库迁移如此复杂的原因是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”

    攻略 2021年10月23日
  • 幂的乘方50道计算题,初一解方程计算题有过程答案

    技术幂的乘方50道计算题,初一解方程计算题有过程答案1。某中学修整草场,如果让初一学生单独工作,需要7。5小时完成;如果让初二学生单独做,需要5小时完成。如果让初一幂的乘方50道计算题、初二学生一起工作1小时,再由初二学

    生活 2021年10月22日
  • JSP怎样连接Mysql数据库

    技术JSP怎样连接Mysql数据库这篇文章主要为大家展示了“JSP怎样连接Mysql数据库”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“JSP怎样连接Mysql数据库”这篇文

    攻略 2021年11月1日
  • css3中设置文本阴影的属性是(css3球体掉落动画带阴影效果)

    技术css3怎么实现图片阴影效果这篇文章主要讲解了“css3怎么实现图片阴影效果”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“css3怎么实现图片阴影效果”吧!css3实

    攻略 2021年12月16日
  • 毛线鞋,3岁小孩毛线棉鞋怎么织

    技术毛线鞋,3岁小孩毛线棉鞋怎么织你好毛线鞋:很高兴回答“3岁小孩毛线棉鞋怎么织”这个问题。1.准备工具/原料:棒针、毛线。2、方法/步骤:起针30针,双色线交替编织20行.织21行的时候,鞋口留5针不织,从织22行开始

    生活 2021年10月31日