Spring Data JPA 中 CrudRepository 和 JpaRepository 的区别

news2024/12/28 10:10:46

1 问题描述

Spring Data JPA 中,CrudRepository 和 JpaRepository 有何区别?

当我在网上找例子的时候,发现它们可以互相替换使用。

它们有什么不同呢?为什么你习惯用其中的一个而不是另一个呢?

2 CrudRepository 和 JpaRepository 的具体区别

2.1 功能上的区别

JpaRepository 扩展了 PagingAndSortingRepository,而 PagingAndSortingRepository 又扩展了 CrudRepository。

它们的主要功能:

  • CrudRepository 主要提供 CRUD (增删改查)功能;

  • PagingAndSortingRepository 提供了执行分页和排序数据的方法;

  • JpaRepository 则提供了一些与 JPA 相关的方法,比如刷新持久性上下文和删除批处理中的记录;

而根据上面讲到的继承关系,JpaRepository 将拥有 PagingAndSortingRepository 和 CrudRepository 所提供的所有功能。因此,如果你不需要使用 PagingAndSortingRepository 和 JpaRepository 提供的额外功能,那么使用 CrudRepository 就足够了。

2.2 使用场景(用途)上的区别

回答 1 的说法完全正确,但我想针对你说的为什么习惯使用其中一个而并非另一个做出解释。

  • 基础知识

一般,我们为存储库所选用的基本几口主要有两个用途。一个是允许 Spring JPA 存储库基础设施查找对应接口并触发代理创建,以便将接口实例注入到客户端。另外一个则是在不声明额外方法的情况下将所需功能尽可能地引入接口中。

  • 通用接口

Spring Data 核心库提供了两个基本接口:

  • CrudRepository - CRUD (增删改查)方法;

  • PagingAndSortingRepository - 扩展 CrudRepository,主要是分页和排序方法;

  • 特定存储接口

各个存储模块(如 JPA 或 MongoDB)公开了用于特定存储的扩展接口,以方便访问特定存储的功能,如刷新或专用的批处理操作。

我们一般不建议使用这些特定接口,因为它们向客户端暴露了底层持久化的接口,加强了它们和存储库之间的耦合。

  • 自定义存储接口

依赖提供的通用接口存在两个主要缺点:

  1. 根据 Spring Data 数据接口的不同,存储库接口与存储库相耦合;

  1. 通过扩展 CrudRepository,就会立马暴露其中的持久化方法;

  • 总结

存储库抽象允许我们自由选择完全由体系结构和功能需求所驱动的基础库。如果合适,我们可以使用开箱即用的方法。而如果有必要,我们也可以自己设计自己的存储接口。如非必要,尽量不要使用特定存储接口。

2.3 实现方法上的区别

总结

  • JpaRepository 扩展了 PagingAndSortingRepository;

  • PagingAndSortingRepository 扩展了 CrudRepository;

CrudRepository 为接口提供了 CRUD 操作提供了方法,因此它允许创建、读取、更新和删除记录,而不用自己去定义方法;

PagingAndSortingRepository 提供了使用分页和排序检索实体的其他方法;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/354066.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ArcGIS网络分析之发布网络分析服务(二)

在上一篇中讲述了如何构建网络分析数据集,本篇将讲解如何发布网络分析服务。本文将使用上一篇中建立的网络数据集,下载地址在上一篇博文的最后已给出。 之前我们已经实现了基于ArcMap中的网络分析,但是仅仅支持本地是万万不够的,这里我们的目的就是将我们建好的网络分析图…

【OJ】两个圆

📚Description: 直角坐标系内现有两个半径相等的圆,问两圆的位置关系。 位置关系有:重合,相切,相离,相交; 若两圆相交,需要求出两圆的重叠面积。 ⏳Input: 输入包含多组数据&a…

【项目精选】户籍管理系统(视频+论文+源码)

点击下载源码 当今社会人们生活质量越来越高,人们对生活品质的追求不断提升,对于孩子求学,变更住所等情况时有发生,因此对于户籍变动管理就显得十分重要,管理用户的户籍信息可以有效防止信息错乱,信息管理过…

百度沈抖:文心一言将通过百度智能云对外提供服务

2月17日,在2023 AI工业互联网高峰论坛上,百度智能云宣布“文心一言”将通过百度智能云对外提供服务,为产业带来AI普惠。 百度集团执行副总裁、百度智能云事业群总裁沈抖表示,“文心一言”是基于百度智能云技术打造出来的大模型&a…

A Time Series is Worth 64 Words(PatchTST模型)论文解读

摘要 我们提出了一种高效的基于Transformer设计的模型,用于多变量时间序列预测和自我监督表征学习(self-supervised learning)。它基于两个关键部分:1、将时间序列分隔成子序列级别的patches,作为Transformer的输入&a…

Allegro负片层不显示反盘的原因和解决办法

Allegro负片层不显示反盘的原因和解决办法 在用Allegro做PCB设计的时候,负片设计是较为常用的一种方式,有时会出现打开负片层却看不到反盘的情况,如下图 L2层是负片层 L2层仍然只能看到盘 如何才能看到反盘显示的效果,具体操作如下 首先确定L2层层叠里面设置的是负片

java ssm爱宠宠物医院挂号预约系统管理系统设计与实现

本课题所实现的宠物医院网站是基于网页,它可以实现网上预约挂号,评价等基本功能。用户只要手边有一部手机或者一台电脑,可以上网浏览网页,便可以使用本系统,没有时间和地点的限制,使得就医预约,…

枚举类(enum)

定义:在某些情况下,一个类的实例对象是有限且固定的,可将该类称为“枚举类”。枚举类是JDK 1.5 之后提出来的。例如:四季只有春夏秋冬4个季节,性别只有男女2个,故四季类和性别类均可称为“枚举类”。 在自…

python(8.5)--列表习题

目录 一、求输出结果题 二、计算列表元素个数 三、查找是否存在某元素 四、删除某元素 五、如何在列表中插入元素 六、如何从列表中删除重复的元素 七、 如何将列表中的元素按照从小到大的顺序排序 八、从列表中删除重复的元素 九、大到小的顺序排序 一、求输出结…

【源码解析】Ribbon和Feign实现不同服务不同的配置

Ribbon服务实现不同服务,不同配置是通过RibbonClient和RibbonClients两个注解来实现的。RibbonClient注册的某个Client配置类。RibbonClients注册的全局默认配置类。 Feign实现不同服务,不同配置,是根据FeignClient来获取自定义的配置。 示…

【大数据】Apache Spark 3.3.0 正式发布,新特性详解

简介 Apache Spark 3.3.0 从2021年07月03日正式开发,历时近一年,终于在2022年06月16日正式发布,在 Databricks Runtime 11.0 也同步发布。这个版本一共解决了 1600 个 ISSUE,感谢 Apache Spark 社区为 Spark 3.3 版本做出的宝贵贡…

Redis学习【8】之Redis RDB持久化

文章目录Redis 持久化1 持久化基本原理2 RDB(Redis DataBase) 持久化2.1 持久化的执行2.2 手动 save 命令2.3 手动 bgsave 命令2.4 自动条件触发2.5 查看持久化时间3 RDB 优化配置3.1 save3.2 stop-write-on-bgsave-error3.3 rdbcompression3.4 rdbchecksum3.5 sanitize-dump-p…

代码随想录算法训练营第六十三天| 503.下一个更大元素II、42. 接雨水

Leetcode - 503这题其实和下一个更大元素那题一样,只是说可以找自己前面的元素,那我索性就把遍历范围从本序列延长到两个相同序列。这样某个元素寻找下一个更大元素到本序列末尾后还可以继续往下,也就是从序列头开始找。这里依旧是可以用单调…

初识CSS,美化HTML

CSS称为&#xff1a;层叠样式表&#xff08;Cascading style sheets&#xff09;美化HTML即给页面种的HTML标签设置样式CSS语法规则css要写在head标签的里边&#xff0c;title标签的下面&#xff0c;用style标签框住<head> <title>...</title> <style>…

Delphi 中自定义鼠标指针图像

Dephi中的鼠标指针是可以自由定义的&#xff0c;如果是使用系统提供的图标&#xff0c;那么直接通过可视控件的Cursor属性赋值就可以。例如设置Form的鼠标为 crHourGlass 沙漏&#xff1a;Form1.Cursor : crHourGlass;也可以在设计期&#xff08;IDE环境中&#xff09;直接更改…

几行代码,就写完懒加载啦?

Ⅰ、前言 「懒加载」是网页中非常 常见的&#xff1b;为了减少系统的压力&#xff0c;对于一些电商系统出场频率非常高&#xff1b;那么大家一般用什么方式去实现 「懒加载」 呢 &#xff1f; ① 通过 scroll 的形式&#xff1a; 通过 滚动「scroll」事件&#xff0c;然后去判…

关系抽取概述

关系抽取介绍 关系抽取概念字1988年在MUL大会上提出&#xff0c;是信息抽取的基本任务之一&#xff0c;目的是为了识别出文本实体中的目标关系。 知识图是语义关联的实体&#xff0c;它将人们对物理世界的认知转化为计算机能够义结构化方式理解的语义信息。 关系抽取通过识别实…

LeetCode分类刷题----二叉树

二叉树1.二叉树的递归遍历144.二叉树的前序遍历145.二叉树的后序遍历94.二叉树的中序遍历2.二叉树的迭代遍历144.二叉树的前序遍历145.二叉树的后序遍历94.二叉树的中序遍历3.二叉树的层序遍历102.二叉树的层序遍历107.二叉树的层序遍历||199.二叉树的右视图637.二叉树的层平均…

数据驱动的两阶段分布鲁棒(1-范数和∞-范数约束)的电热综合能源系统研究(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

笔记本加装固态和内存条教程(超详细)

由于笔记本是几年前买的了&#xff0c;当时是4000&#xff0c;现在用起来感到卡顿&#xff0c;启动、运行速度特别慢&#xff0c;就决定换个固态硬盘&#xff0c;加个内存条&#xff0c;再给笔记本续命几年。先说一下加固态硬盘SSD的好处&#xff1a;1.启动快 2.读取延迟小 3.写…