当前位置: 首页 > news >正文

Spring Data JPA 中 CrudRepository 和 JpaRepository 的区别

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 提供了使用分页和排序检索实体的其他方法;

相关文章:

Spring Data JPA 中 CrudRepository 和 JpaRepository 的区别

1 问题描述Spring Data JPA 中,CrudRepository 和 JpaRepository 有何区别?当我在网上找例子的时候,发现它们可以互相替换使用。它们有什么不同呢?为什么你习惯用其中的一个而不是另一个呢?2 CrudRepository 和 JpaRep…...

推荐几款好用的数据库管理工具

本文主要介绍几款常用的数据库管理软件(客户端),包括开源/免费的、商用收费的,其中有一些是专用于 MySQL 数据库的,例如 MySQL Workbench、phpMyAdmin,有一些是支持多种 SQL、NoSQL 数据库的,例…...

DPDK — 性能优化手段

目录 文章目录 目录硬件布局层面的优化操作系统层面的优化Linux 操作系统版本应用程序层面的优化Cache 优化内存对齐内存预取SIMD 报文批处理DDIO使用高级 CPU 指令集硬件布局层面的优化 DPDK 在硬件布局层面的优化,主要体现在以下几个方面: CPU 频率的高低:CPU 频率越高,…...

Fedora Linux未来五年规划

Fedora 委员会一直致力于起草战略计划,以帮助 Fedora Linux 更好地发展。近日 Fedora 委员会公布了一份 “《未来五年的 Fedora Linux 》” 战略计划草案,这份草案里面包含了他们的雄心壮志:每周将 Fedora 的活跃贡献者人数增加一倍。 Fedora…...

【C++之容器篇】map和set常见函数接口的使用与剖析

目录前言一、set1. 简介2. 成员类型3. 构造函数(1) set()(2)set(InputIterator first,InputIterator last)(3)使用4. 拷贝构造函数和赋值运算符重载5. empty()6. size()7. insert()(1)pair<iterator,bool> insert(const K& key)(2)iterator insert(iterator pos,cons…...

虚拟DOM是什么

参考文章做的总结&#xff0c;如有不足之处请指正&#xff01; 在讲虚拟dom之前&#xff0c;先讲讲&#xff0c;为什么前端操作dom会导致页面性能降低&#xff1f; 先说几个概念 有助于后面的理解 什么是 JavaScript 引擎&#xff1f; JavaScript引擎是一个专门处理JavaScript脚…...

进程通信方式

无名管道( pipe )&#xff1a; 管道是一种半双工的通信方式&#xff0c;数据只能单向流动&#xff0c;而且只能在具有亲缘关系的进程间使用。进程的亲缘关系通常是指父子进程关系。高级管道&#xff08;popen&#xff09;&#xff1a; 将另一个程序当做一个新的进程在当前程序进…...

强化学习基础知识

强化学习是一种机器学习方法&#xff0c;通过agent与environment的互动&#xff0c;学习适当的action policy以取得更大的奖励reward。本篇博客介绍强化学习的基础知识&#xff0c;与两类强化学习模型。 目录强化学习的基础设定policy based 强化学习的目标3个注意事项实际训练…...

LeetCode230218_148、654. 最大二叉树

给定一个不重复的整数数组 nums 。 最大二叉树 可以用下面的算法从 nums 递归地构建: 创建一个根节点&#xff0c;其值为 nums 中的最大值。 递归地在最大值 左边 的 子数组前缀上 构建左子树。 递归地在最大值 右边 的 子数组后缀上 构建右子树。 返回 nums 构建的 最大二叉树…...

WordPress 是什么?.com 和 .org 的 WordPress 有什么差异?

本篇文章会介绍这次WordPress 5.8核心版本所带来的其中一项新功能&#xff1a;内存块小工具&#xff08;Widget&#xff09;此次更新把小工具编辑设定的页面也改成用「内存块编辑」的概念&#xff0c;就跟内置的「古腾堡」编辑器一样&#xff0c;把所有元件都内存块化&#xff…...

java8新特性【2023】

Lambda表达式 新的一套语法规则 是一个匿名函数 Testpublic void test1(){Runnable r1 new Runnable(){Overridepublic void run() {System.out.println("线程A");}};r1.run();System.out.println("");Runnable r2 () -> System.out.println("…...

刷题记录:牛客NC51101Lost Cows

传送门:牛客 题目描述: (2≤N≤8,000) cows have unique brands in the range 1..N. In a spectacular display of poor judgment, they visited the neighborhood watering hole and drank a few too many beers before dinner. When it was time to line up for their ev…...

华为OD机试 - 不等式 | 备考思路,刷题要点,答疑 【新解法】

最近更新的博客 华为OD机试 - 寻找路径 | 备考思路,刷题要点,答疑 【新解法】华为OD机试 - 最小叶子节点 | 备考思路,刷题要点,答疑 【新解法】华为OD机试 - 对称美学 | 备考思路,刷题要点,答疑 【新解法】华为OD机试 - 最近的点 | 备考思路,刷题要点,答疑 【新解法】华…...

GuLi商城-SpringCloud-OpenFeign测试远程调用

1. Feign 简介 Feign 是一个声明式的 HTTP 客户端&#xff0c;它的目的就是让远程调用更加简单。Feign 提供了HTTP请 求的模板&#xff0c;通过编写简单的接口和插入注解&#xff0c;就可以定义好 HTTP 请求的参数、格式、地址等信 息。Feign 整合了 Ribbon&#xff08;负载…...

阿里云_山东鼎信短信的使用(云市场)

目录山东鼎信API工具类随机验证码工具类进行测试Pom依赖(可以先导入依赖)创建controllerSmsServiceSmsServiceImplswagger测试(也可以使用postman)山东鼎信API工具类 山东鼎信短信官网 找到java的Api&#xff0c;复制下来 适当改了一下&#xff0c;为了调用(类名SmsUtils) p…...

基于虚拟机机的代码保护技术

虚拟机保护技术是基于x86汇编系统的可执行代码转换为字节码指令系统的代码&#xff0c;以达到保护原有指令不被轻易逆向和篡改的目的。 字节码&#xff08;Byte-code&#xff09;是一种包含执行程序&#xff0c;由一序列 op 代码/数据对组成的 &#xff0c;是一种中间码。字节是…...

Win10耳机有声音麦不能说话怎么办?麦克风说话别人听不到解决方法

网上找了一些解决办法&#xff0c;一般都是重复的&#xff0c;几个设置调来调去也就那样&#xff0c;没什么用 这种问题一般是“老式”一点的台式机会出现&#xff0c;提供的解决办法如下&#xff1a; 首先下载带面板的音频管理器&#xff0c;如realtek高清晰音频管理器&…...

The 22nd Japanese Olympiad in Informatics (JOI 2022/2023) Final Round 题解

交题&#xff1a;https://cms.ioi-jp.org/documentation A 给一个序列 a1,⋯,ana_1,\cdots,a_na1​,⋯,an​。 执行nnn个操作&#xff0c;第iii个操作为找出第iii个数前离其最近且与它相同的数的位置&#xff0c;把这两个数之间的数全部赋值aia_iai​。求最后的序列。 考虑第…...

openEuler RISC-V 成功适配 VisionFive 2 单板计算机

近日&#xff0c;RISC-V SIG 成功在 VisionFive 2 开发板上适配欧拉操作系统&#xff0c;目前最新版本的 openEuler RISC-V 22.03 V2 镜像已在 VisionFive 2 开发板上可用&#xff0c;这是 openEuler 推动 RISC-V 生态演进的又一新进展。下载链接​​https://mirror.iscas.ac.c…...

2005-2022中国企业对外直接投资、OFDI海外投资明细、中国全球投资追踪数据CGIT(含非建筑施工类问题投资)

中国全球投资跟踪”&#xff08;China Global Investment Tracker&#xff09;&#xff0c;数据库&#xff0c;美国企业研究所于1月28日发布。数据库显示&#xff0c;2005年以来&#xff0c;中国对外投资和建设总额已接近2万亿美元。该数据库是唯一一套涵盖中国全球投资和建设的…...

Win10下Excel数据源配置全攻略:ODBC连接保姆级教程(含常见问题解决)

Win10下Excel数据源配置全攻略&#xff1a;ODBC连接保姆级教程&#xff08;含常见问题解决&#xff09; 在数据分析与报表自动化领域&#xff0c;Excel作为最普及的工具之一&#xff0c;经常需要与其他系统进行数据交互。ODBC&#xff08;开放数据库互连&#xff09;技术就像一…...

htcw_esp_panel:ESP32嵌入式显示与触摸的编译期硬件抽象框架

1. htcw_esp_panel&#xff1a;面向嵌入式显示与人机交互的全栈式硬件抽象层htcw_esp_panel 是一个专为 ESP32 系列 SoC&#xff08;包括 ESP32-S2/S3/C3/P4&#xff09;设计的轻量级、可配置化硬件抽象库。它并非简单的驱动封装&#xff0c;而是一套覆盖显示、触摸、按键、SD …...

ANSYS Workbench ACT插件 FE Info 实战指南:从安装调试到高效查询

1. 为什么你需要FE Info插件 在ANSYS Workbench中进行有限元分析时&#xff0c;经常会遇到需要查询节点编号、单元信息或者测量距离的情况。比如设置耦合约束时&#xff0c;需要精确知道两个节点的距离&#xff1b;验证网格质量时&#xff0c;需要快速定位特定单元&#xff1b;…...

DeerFlow智能体技能开发:从零构建自定义Research Agent

DeerFlow智能体技能开发&#xff1a;从零构建自定义Research Agent 1. 引言 如果你正在寻找一种方法来扩展DeerFlow研究团队的能力&#xff0c;让AI助手能够处理更专业的研究任务&#xff0c;那么自定义智能体技能开发就是你需要掌握的技能。想象一下&#xff0c;你的研究助手…...

从零理解IEEE 1500:芯片测试工程师必备的核心测试语言(CTL)指南

从零理解IEEE 1500&#xff1a;芯片测试工程师必备的核心测试语言(CTL)指南 在当今高度集成的芯片设计领域&#xff0c;测试工程师面临着前所未有的挑战。随着SoC设计复杂度呈指数级增长&#xff0c;传统的测试方法已无法满足现代芯片验证的需求。IEEE 1500标准应运而生&#x…...

LeetCode1170题解:预处理+二分查找

LeetCode第1170题[比较字符串最小字母出现频次] 典型的先预处理&#xff0c;再二分统计 题目本质&#xff1a; 对于每个 queries[i]&#xff0c;计算&#xff1a;有多少个 word 满足 f(queries[i]) < f(word) 也就是&#xff1a;先求出查询串的 f 再去 words 里数有多少个…...

Yuxi-Know终极部署指南:5步解决大模型RAG知识库常见问题

Yuxi-Know终极部署指南&#xff1a;5步解决大模型RAG知识库常见问题 【免费下载链接】Yuxi-Know 基于大模型 RAG 知识库与知识图谱的问答平台。Llamaindex VueJS Flask Neo4j。大模型适配 OpenAI、国内主流大模型平台的模型调用、本地 vllm 部署。 项目地址: https://gitc…...

【2025最新】基于SpringBoot+Vue的小型企业客户关系管理系统管理系统源码+MyBatis+MySQL

摘要 在当今竞争激烈的商业环境中&#xff0c;小型企业亟需高效的客户关系管理&#xff08;CRM&#xff09;系统来优化客户交互、提升销售效率并增强客户忠诚度。传统的客户管理方式依赖人工记录和电子表格&#xff0c;存在数据冗余、查询效率低、信息共享困难等问题。随着信息…...

开源工具Rufus实现专业级启动盘制作的完整指南

开源工具Rufus实现专业级启动盘制作的完整指南 【免费下载链接】rufus The Reliable USB Formatting Utility 项目地址: https://gitcode.com/GitHub_Trending/ru/rufus 系统重装时遇到的启动失败、镜像损坏、硬件不兼容等问题是否让你束手无策&#xff1f;作为一款免费…...

网络安全人才平均年薪 24.09 万,跳槽周期 31 个月,安全工程师现状大曝光!

网络安全作为近两年兴起的热门行业&#xff0c;成了很多就业无门但是想转行的人心中比较向往但是又心存疑惑的行业&#xff0c;毕竟网络安全的发展史比较短&#xff0c;而国内目前网安的环境和市场情况还不算为大众所知晓&#xff0c;所以到底零基础转行入门网络安全之后&#…...