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

http://www.lryc.cn/news/11076.html

相关文章:

  • 推荐几款好用的数据库管理工具
  • DPDK — 性能优化手段
  • Fedora Linux未来五年规划
  • 【C++之容器篇】map和set常见函数接口的使用与剖析
  • 虚拟DOM是什么
  • 进程通信方式
  • 强化学习基础知识
  • LeetCode230218_148、654. 最大二叉树
  • WordPress 是什么?.com 和 .org 的 WordPress 有什么差异?
  • java8新特性【2023】
  • 刷题记录:牛客NC51101Lost Cows
  • 华为OD机试 - 不等式 | 备考思路,刷题要点,答疑 【新解法】
  • GuLi商城-SpringCloud-OpenFeign测试远程调用
  • 阿里云_山东鼎信短信的使用(云市场)
  • 基于虚拟机机的代码保护技术
  • Win10耳机有声音麦不能说话怎么办?麦克风说话别人听不到解决方法
  • The 22nd Japanese Olympiad in Informatics (JOI 2022/2023) Final Round 题解
  • openEuler RISC-V 成功适配 VisionFive 2 单板计算机
  • 2005-2022中国企业对外直接投资、OFDI海外投资明细、中国全球投资追踪数据CGIT(含非建筑施工类问题投资)
  • PCB学习笔记——使用嘉立创在线绘制原理图与PCB
  • 【C++】类型转化
  • Mybatis -- resultMap以及分页
  • Linux之进程
  • 结构体——“C”
  • CCNP350-401学习笔记(51-100题)
  • C语言学习_DAY_4_判断语句if_else和分支语句switch_case【C语言学习笔记】
  • 实验07 赫夫曼编码及综合2022(带程序填空)
  • 分布式 CAP BASE理论
  • 三调地类筛选器,Arcgis地类筛选
  • 华为OD机试 - 密室逃生游戏(Python)