Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >Spring Data ( JPA )与JPA持久化提供者有何关系?

Spring Data ( JPA )与JPA持久化提供者有何关系?
EN

Stack Overflow用户
提问于 2014-01-07 18:09:07
回答 3查看 3.6K关注 0票数 8

我正在尝试理解JPA,并且已经学到了很多。JPA是一种java规范,供应商实现了该规范。我明白这一点。

我不明白的是Spring数据是如何出现在图片中的。Spring Data也是像Hibernate或OpenJPA一样的提供者吗?如果不是,那是什么?Spring数据如何“让事情变得更简单”?

EN

回答 3

Stack Overflow用户

发布于 2014-01-08 17:35:22

一般来说,Spring Data项目是一个具有以下任务声明的总括项目:

…提供熟悉且一致的基于Spring的编程模型,同时保留特定于商店的特性和功能。

因此,我们通常不只是通过JPA访问关系数据,而是处理持久性空间。这里重要的一点是两个方面:

  1. 编程模型,而不是通用
  2. 支持商店的特定功能

由于如今的数据访问空间是如此的多样化,试图用一个统一的API来访问所有的商店注定会失败。你最终会得到一个最不常见的东西,它隐藏了商店的特定部分-在你有选择地选择一个特定商店的时候,因为它的特殊性。将这些抽象出来完全颠覆了这一点。特别是在我们看来,试图使用JPA是错误的,因为它与关系概念(@Table、joins、transactions)有很深的联系。

尽管如此,你不会想要使用完全不同的API,如果你使用多个API或从一个项目切换到另一个项目,也不想迷失在商店差异中。Spring传统上通过采用一致的编程模型在这方面提供了帮助,该模型的特征是工作方式相同但仍然特定于特定技术的抽象。例如,JDBC和JMS是完全不同的技术。Spring既提供了JdbcTemplate,也提供了涵盖相同职责(资源管理和异常转换)的JmsTemplate,并在从使用JDBC到JMS或从使用JDBC到JMS时降低了学习曲线。

Spring Data通过Spring开发人员知道的抽象来公开特定于商店的功能,从而利用了这一点。我已经提到了模板,但它还包括一般的配置机制(XML名称空间,使用DI和AOP等)。

存储库

这个编程模型的最顶层是存储库抽象。在其核心部分,它通过让您避免编写超出严格要求的实现代码,极大地简化了数据访问层的开发。它提供了开箱即用的CRUD功能、分页以及声明性查询方法。

假设有一个Customer域类。启用持久化只需声明一个存储库接口,如下所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
interface CustomerRepository extends PagingAndSortingRepository<Customer, Long> {

  List<Customer> findByLastnameContaining(String lastname);
}

现在是配置问题(和域类映射),以便能够创建此接口的实例并从客户端使用它。PagingAndSortingRepository包括基本的CRUD功能以及像Page<Customer> findAll(Pageable pageable)这样的东西(因此可以逐页访问)。如您所见,我们还支持查询派生机制,以避免为简单的查询编写任何实现代码。对于更复杂的,我们允许手动声明(例如,在方法上使用@Query ),甚至在必要时手动实现。

这里的一个巧妙的副作用是,通过在配置中进行切换,您可以使用相同的存储库接口将Customer实例持久化到MongoDB中。这并不意味着我们建议盲目地从一个商店移动到另一个商店,因为商店通常需要调整数据模型以有效地工作。然而,它允许开发人员在使用不同商店的项目之间快速切换,因为存储库以相同的方式工作(通过公共API方法实现编程模型)。

JPA细节

Spring Data JPA实际上是一个实现存储库抽象的薄层,外加一些其他花哨的功能。因此,我们不会替换持久性提供程序,而是通过API实际利用它们,甚至减轻了各个JPA提供程序之间的一些怪癖和差异。

票数 12
EN

Stack Overflow用户

发布于 2014-01-07 18:20:08

可以将Spring数据看作一种支持JPA和许多其他持久性模型的方式,这种方式对您自己的代码是透明的。Spring Data使您可以更轻松地在统一界面中操作更多类型的数据源系统。如果没有Spring Data,您将需要在代码中引入更多适配器,每次您都必须处理额外的逻辑。

票数 2
EN

Stack Overflow用户

发布于 2018-03-14 21:23:13

spring-data JPA不是一个JPA提供者。它是一个库/框架,在我们的JPA提供者(Hibernate/TopLink)的顶部添加了一个额外的抽象层。如果您在项目中使用Spring Data,则不会编写大多数低级数据访问操作,如编写SQL查询、DAO类等。

但是您必须有一个jpa提供程序(Hibernate、Toplink等)来实现spring-data-jpa。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20978739

复制
相关文章
关于随机数生成的速度测试
随机数生成有两种方法,一种是主机上生成拷贝到设备上,另一种是直接主机上调用,在设备上生成:下面就是关于这两种方法的速度测试: int main(){ clock_t start,finish; int *d_data; int m = 1000; CUDA_CALL(cudaMalloc((void **)&d_data, m*sizeof(int))); int rand1[1000]; start = clock(); memset(ra
用户1154259
2018/01/17
1K0
接口测试的时候如何生成随机数据进行测试
在进行接口测试的时候会需要生成一些随机数据进行测试,今天教大家使用apipost自带的mock字段变量生成随机数据进行测试。
zyf20010801
2022/06/08
1.1K0
软件测试中质量优于数量
在软件行业中,作为质量保证的一部分,始终希望确保产品/项目以最高的质量达到预期。但是,真正具有讽刺意味的是,我们所有的质量指标都归结为数量和术语,例如记录的错误,编写的测试用例,执行的测试用例,测试所花费的时间,测试的BUG率,漏测率等等。
FunTester
2020/02/17
1K0
iphone拍照的历史顽固问题-鬼影
近期苹果 iPhone 11 系列的手机又出现了新问题,其中有不少网友表示,自己在用手机拍照后,图片中莫名出现了“鬼影”的现象,这次的“鬼影门”是指手机对着灯光拍照时,手机屏幕内会出现倒影和炫光。
AomanHao
2022/01/14
1.1K0
iphone拍照的历史顽固问题-鬼影
dotnet 世界猜测 随机数的小测试
这是一个半技术向的博客,主题来源于我读过的某本书的片段,这是一个稍稍有些前置知识的故事,主题的大概内容就是假定世界存在某个规则序列,通过一代代的探索,可以获取到此序列的内容。本文将模拟此情形,写一个随机数的小测试应用,来不严谨的证明,或者准确来说是用代码讲述这个故事
林德熙
2023/04/07
3790
第8期 | jsmn,一个资源占用极少的json解析器
本专栏由Mculover666创建,主要内容为寻找嵌入式领域内的优质开源项目,一是帮助开发者使用开源项目实现更多的功能,二是通过这些开源项目,学习大佬的代码及背后的实现思想,提升自己的代码水平,和其它专栏相比,本专栏的优势在于:
Mculover666
2020/07/16
1.9K0
第8期 | jsmn,一个资源占用极少的json解析器
如何彻底删除Windows顽固的计划任务
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Schedule\TaskCache\Tree\
Windows技术交流
2021/11/08
3.8K0
性能测试中的随机数性能问题探索
其实第二个场景包含在第一个场景内。对于接口测试来说,通常我们直接使用第二种场景比较多,就是从某一个集合中随机取一个值。如果更复杂一些,每个值拥有不同的权重,其中这个也可以转化成第二个场景来说。
FunTester
2022/12/09
7160
盗取QQ密码的顽固的IEXPLORE.EXE病毒
开机以后不久,在进程里面会出现多个IEXPLORE.EXE进程,用户名都是SYSTEM,杀掉进程之后,过一段时间就会重新启动这个进程。而且IEXPLORE.EXE进程的cpu占用率常常达到100%!计算机根本就无法使用。在进行拨号连网后,系统可能出现重起.甚是恼人!
全栈程序员站长
2022/09/09
8000
【SpringBoot】 设置随机数据 用于测试用例
.29.
2023/10/17
2150
【SpringBoot】 设置随机数据 用于测试用例
【干货】用极少量样本有效的训练分类器-对抗自编码器PyTorch手把手实战系列
即使是非计算机行业, 大家也知道很多有名的神经网络结构, 比如CNN在处理图像上非常厉害, RNN能够建模序列数据. 然而CNN, RNN之类的神经网络结构本身, 并不能用于执行比如图像的内容和风格分
WZEARW
2018/06/05
2.4K1
mysql生成百万级数量测试数据
    今天因为项目需要,想测试一下读取百万级数量数据的速度如何,无奈数据库没有现成符合要求的数据,网上百度一番有很都不错的文章,但是需要涉及到一些存储过程和用php代码什么的,虽说可以实现,但是感觉另外再弄这些比较麻烦,没有通用性,于是在几篇文章的参考下,.自己写了一段代码,直接生成的数据还是比较方便的,并且不是重复的数据.网上很多都是重复的,我只是做了一点小的修改,测试数据库是mysql 5.5,存储形式是MyISAM,每次生成的数据量是之前的一倍.测试的量有限,如有什么疑问欢迎评论指正.      
@坤的
2018/06/04
3.1K1
JS基础测试: 单选 下列随机数公式中正确的是
Math.random() 函数返回一个浮点, 伪随机数在范围[0,1),也就是说,从0(包括0)往上,但是不包括1(排除1),然后可以缩放到所需的范围。
舒克
2019/08/19
1.7K0
性能测试:吞吐量和并发请求数量的关系
吞吐量和并发请求数量的关系可以通过下面的类比来理解:假设你有一家餐厅,"并发请求数量"就像是餐厅里的客人数量,而"吞吐量"就像是餐厅在一小时内能够服务的客人数量。即使你的餐厅可以同时容纳100个客人,但如果你的厨师只能每小时做出50份餐点,那么你的"吞吐量"就是50,而不是100。
运维开发王义杰
2023/08/16
9790
redis 数量控制器,红包实例
命令: set 设置值 exists 判断key是否存在 get 获取值 incr 增加/减少值 incrby 增加/减少指定数值 setnx 不存在才能设置key 抽奖实现
DencyCheng
2019/01/07
6110
python产生随机数的方法_产生随机数的函数
Python产生随机数: 一.Python自带的random库 1.参生n–m范围内的一个随机数: random.randint(n,m)
全栈程序员站长
2022/11/09
1.7K0
随机数:真随机数和伪随机数一样吗_rdrand真随机数
说到随机这个词,相信各位肯定都深有体会了。生活中有太多的不确定因素从各方各面影响着我们,但也正是因为这样我们的人生更加多彩,具有了更多的可能性。
全栈程序员站长
2022/11/03
5.1K0
求煤球的数量
有一堆煤球,推成三角锥。第一层放1个,第二层放3个(排列成三角形),第三层放6个(排列成三角形),第四层放10个(排列成三角形),如果放100层,需要多少个煤球。
算法与编程之美
2022/05/23
4810
PG数量的预估
预设Ceph集群中的PG数至关重要,公式如下: (**结果必须舍入到最接近2的N次幂的值)**
Lucien168
2020/07/20
1.1K0
用量子计算模拟器ProjectQ生成随机数,并用pytest进行单元测试与覆盖率测试,以及基于flake8的编码规范测试
本文中主要包含有三个领域的知识点:随机数的应用、量子计算模拟产生随机数与基于pytest框架的单元测试与覆盖率测试,这里先简单分别介绍一下背景知识。
DechinPhy
2021/05/21
2.6K0

相似问题

如何在安装组件之前等待App.js代码运行?

11

如何从函数组件获取值到类组件(App.js)?

13

将函数参数从App.js传递到React中的其他组件

112

从另一个组件调用App.js中的函数

10

反应:如何在App.js中从Stack.Screen组件中设置变量?

18
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文