Spring Data JPA命名约定查询实现方法

 更新时间:2023年12月10日 08:56:43   作者:zz  
这篇文章主要为大家介绍了Spring Data JPA命名约定查询实现方法示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

很笨的实现

假设我只要需要最后三条数据,如下是我的实现方法,这是一个很笨的实现,因为这个操作是真的很冗余,这个是请求到了全部,在进行降序排序,然后在截取前面三条数据。

// 创建一个 Sort 对象,表示按照 ID 降序排列
        Sort sort = Sort.by(Sort.Direction.DESC, "id");
        List<Rank> allRanks = this.rankRepository.findAll(sort);
        int size = allRanks.size();
        if (size > 3) {
            allRanks = allRanks.subList(0, 3);
        }

Sort.Direction.DESC 按降序排序,desc 是descend的缩写
Sort.Direction.ASC 按升序排序,asc 是ascend的缩写

JpaRepository

根据上面操作,起码写了六行代码,我只需要使用命名约定查询findTop3ByOrderByIdDesc()这个方法jpa会根据这个方法名称返回前面三条数据。

在前面已经继承JpaRepository接口。JpaRepository接口又继承了四个接口PagingAndSortingRepository、CrudRepository、Repository、QueryByExampleExecutor,看到接口继承关系图如下:

从上图中我们可以看到两种线,虚线和带箭头的实线。

  • 实线带箭头: 通常表示继承关系。在继承关系中,子类继承了父类的属性和方法。实线箭头的方向指向父类,表示子类是从父类继承而来。
  • 虚线: 通常表示关联或依赖关系。在关联关系中,一个类与另一个类有某种关联,但不一定是继承关系。虚线箭头的方向通常表示关联的方向,即其中一个类依赖于另一个类。

继承四个接口的作用

  • Repository接口:提供了基本的 CRUD 操作,是仓库接口层次结构的最顶层。
  • CrudRepository接口:CrudRepository 是继承自 Repository 接口的子接口,提供了基本的 CRUD 方法,包括保存、查询、更新和删除。
  • PagingAndSortingRepository接口:PagingAndSortingRepository 是继承自 CrudRepository 接口的子接口。
  • QueryByExampleExecutor 接口:支持基于实例的动态查询的方法、允许你通过传递一个示例对象来执行查询,而不需要手动编写查询语句。

如何使用命名约定查询

Spring Data JPA提供的方法命名规则定义方法的名称,就可以完成查询工作。程序执行的时候会根据方法名称进行解析,并自动生成sql语句进行查询。

规则如下:

1.findBy  + 属性名称 (根据属性名称进行完成匹配的查询=)findByName

2.findBy  + 属性名称 + “查询方式(Like | isnull)” findByNameLike

3.多条件查询
 findBy + 属性名 + “查询方式”   + “多条件的连接符(and|or)”  + 属性名 + “查询方式” 既 findByWeekReportIdAndVoteUserId

Sample

public class Vote extends BaseEntity<Long> {
    @ManyToOne
    private User voteUser;
    @ManyToMany
    private List<VoteDetail> voteDetails;
    @ManyToOne
    private WeekReport weekReport;
}

实现查询:

List<Vote> votesFind = voteRepository.findAll();
 List<Vote> votes = voteRepository.findByWeekReportIdAndVoteUserId(1L, 1L);

这样就实现多条件查询了,我想如果我不知道这个命名约定查询之前肯定会,先全部请求到数据,然后一个个for if去对比数据,最后才拿到我想要的数据。

总结

使用命名约定查询,减少错误的发生,提高开发效率,简化查询语句的编写;这样也使得代码更具有易读性,而且只需要定义方法的命名即可。

参考

官网地址:https://springdoc.cn/spring-data-jpa/#repositories.namespace-...

以上就是Spring Data JPA命名约定查询实现方法的详细内容,更多关于Spring Data JPA命名约定查询的资料请关注脚本之家其它相关文章!

相关文章

  • Spring线程池ThreadPoolTaskExecutor配置详情

    Spring线程池ThreadPoolTaskExecutor配置详情

    本篇文章主要介绍了Spring线程池ThreadPoolTaskExecutor配置详情,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-03-03
  • JAVA集合框架Map特性及实例解析

    JAVA集合框架Map特性及实例解析

    这篇文章主要介绍了JAVA集合框架Map特性及实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-04-04
  • 基于Java开发一个极简版敏感词检测工具

    基于Java开发一个极简版敏感词检测工具

    这篇文章主要为大家详细介绍了如何基于Java开发一个极简版敏感词检测工具,文中的示例代码简洁易懂,感兴趣的小伙伴可以跟随小编一起学习一下
    2025-08-08
  • Spring FTP上传下载工具类遇到问题小结

    Spring FTP上传下载工具类遇到问题小结

    本文通过实例代码给大家介绍了Spring FTP上传下载工具类遇到问题小结,非常不错,具有参考借鉴价值,需要的朋友参考下吧
    2017-12-12
  • idea Gradle 控制台中文乱码的解决

    idea Gradle 控制台中文乱码的解决

    通过IDEA执行gradle的任务时,在终端的输出出现中文乱码,本文主要介绍了idea Gradle 控制台中文乱码的解决,具有一定的参考价值,感兴趣的可以了解一下
    2024-03-03
  • Java删除String中空格的多种解决方法汇总

    Java删除String中空格的多种解决方法汇总

    在Java中从字符串中删除空格有很多不同的方法,如trim,replaceAll等,下面这篇文章主要给大家介绍了关于Java删除String中空格的多种解决方法,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-06-06
  • SpringBoot中@Value获取值和@ConfigurationProperties获取值用法及比较

    SpringBoot中@Value获取值和@ConfigurationProperties获取值用法及比较

    在Spring Boot中,@Value注解是一个非常有用的特性,它允许我们将外部的配置注入到我们的Bean中,@ConfigurationProperties用于将配置文件中的属性绑定到 Java Bean 上,本文介绍了@Value获取值和@ConfigurationProperties获取值用法及比较,需要的朋友可以参考下
    2024-08-08
  • SpringBoot项目中遇到的BUG问题及解决方法

    SpringBoot项目中遇到的BUG问题及解决方法

    这篇文章主要介绍了SpringBoot项目中遇到的BUG问题及解决方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-11-11
  • java对象中什么时候适合用static修饰符踩坑解决记录

    java对象中什么时候适合用static修饰符踩坑解决记录

    这篇文章主要为大家介绍了java对象中什么时候适合用static修饰符踩坑解决记录,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-09-09
  • 全面剖析java中的注解(Annotation)

    全面剖析java中的注解(Annotation)

    一个词就可以描述注解,那就是元数据,即一种描述数据的数据。所以,可以说注解就是源代码的元数据。文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-04-04

最新评论