没有合适的资源?快使用搜索试试~ 我知道了~
资源详情
资源评论

Spring 数据 JPA - 参考文档
4.使用 Spring 数据存储库
数据库抽象的目标是大大减少为各种持久性存储实现数据访问层所需的样板代码量。
4.1 核心概念
数据库抽象中的中央界面 (可能不是什么惊喜)。管理域类以及域类的 类型作为类
型参数。此接口主要作为标记接口捕获要使用的类型,并帮助您发现扩展此接口的接口。该
规定对于正在管理的实体类复杂的 功能。
示例
1. CrudRepository
接口
!"#保存给定的实体
$!%&"#返回由给定的 标识的实体。
'!"#返回所有实体。
(!"#返回实体数。
!"#删除给定的实体。
!%&"#指示是否存在具有给定 的实体。
))*%%+
,
我们还提供持久性技术特定的抽象,例如 - 或 .。 除了相当通用的
持久化技术不可知的接口,例如 ,这些接口还扩展和暴露了底层持久性技术的功能。
除此之外, 还有一个 /' 抽象方法可以添加其他方法来简化对实体的
分页访问:
示例
2. PagingAndSortingRepository
/'
'!"#
/'!/"#
,

访问第二页的 页面大小为 01,你可以简单地做这样的事情:
/'(2))*
/2+'!3/4!501""#
除了查询方法之外,还可以查询计数和删除查询的推导。
示例
3.
派生计数查询
(
(6(%!%"#
,
派生删除查询
(
(6(%!%"#
(% 6(%!%"#
,
4.2 查询方式
标准 功能库通常在基础数据存储上有查询。使用 数据,声明这些查询将成为四个步骤:
5、声明扩展 或其一个子接口的接口,并将其键入将要处理的域类和 类型。
//(*,
0、在界面上声明查询方法。
//(
(/6(%!%"#,
7、设置 为这些接口创建代理实例。通过 - :

%+%38++9+++:-#
;:-,
或通过 <.(
配置 :
=% 2>5+1>2>?@A>=%2>BC))333+%38+)B%)>
%C2>BC))333+37+)0115)<.(B%@>
%C92>BC))333+%38+)B%))9>
CB%(2>BC))333+%38+)B%)
BC))333+%38+)B%))@+
BC))333+%38+)B%))9
BC))333+%38+)B%))9)@9+>
9C@82>%+%+>)
)
在这个例子中使用 -/' 命名空间。如果您正在为任何其他商店使用存储库抽象,则需要将其更改为商店模块的
相应命名空间声明,该名称空间声明应该进行交换 9,例如 %。
另外,请注意,- 变体不会明确地配置程序包,因为默认情况下使用注释类的程序包。要自定义要扫
描的软件包,请使用 /8*数据存储特定存储库@ 的;:*属性之一。
D、获取注册表实例并使用它。
%
;'3
/#
%B!"
(/2+6(%!>.B3>"#
,,
下面的部分详细说明每一步。

4.3 定义存储库接口
作为第一步,您定义一个域类别的存储库接口。该接口必须扩展 并输入到域类和 类型。
如果要公开该域类型的 方法,则扩展 而不是 。
4.3.1 定义存储库接口
通常情况下,你的存储库接口界面将延长 , 或 /'。或者,如
果您不想扩展 数据接口,还可以使用它来注释存储库界面;。扩展
公开了一套完整的方法来操纵您的实体。如果您希望对所暴露的方法有选择性,只需将要暴露的方
法复制 到您的域库中即可。
这允许您在提供的 数据存储库功能之上定义自己的抽象。
示例
4.
选择性地暴露
CRUD
方法
;E6
.6
$!"#
!"#,
.6(
6:%'!:%'%'"#,
在此第一步中,您为所有域存储库定义了一个公共基础接口,并将其暴露出来 $!*"。 !*"这些
方法将被路由到由 提供的您选择的存储库的基本存储库实现中,例如在 -/' 的情况下
%-,因为他们正在匹配方法签名 。所以 现在将能够保存用户,
并通过 查找单个,以及触发查询以 通过其电子邮件地址查找。
请注意,中间版本库接口被注释为;E6。确保将该注释添加到 不应在运行时
创建实例的所有存储库接口。
4.3.2 使用多个 Spring 数据模块的存储库
在应用程序中使用唯一的 数据模块使事情变得简单,因此定义范围内的所有存储库接口都绑
定到 数据模块。有时应用程序需要使用多个 数据模块。在这种情况下,存储库定义需
要区分持久性技术。 进入严格的存储库配置模式,因为它在类路径上检测到多个存储库
工厂。严格的配置需要有关存储库或域类的详细信息来决定用于存储库定义的 数据模块绑定:
5、如果存储库定义扩展了模块特定的存储库,那么它是特定- 数据模块的有效候选者。
0、如果域类使用模块特定类型注释进行注释,那么它是特定 数据模块的有效候选项。 数据模块接
受第三方注释(如 -/'F;:)或提供自己的注释,例如;%.6)
:B。

示例
5.
使用模块特定接口的存储库定义
.-(,
;E6
.6-
*,
.6(
*,
. 并 延长 - 他们的类型层次。它们是 -/' 模块的有效候选。
示例
6.
使用通用接口的存储库定义
'%(
*,
;E6
.6
*,
'%.6(
*,
'% 和 '% 仅延伸 ,并 在他们的类型层次。虽然使
用独特的 数据模块是非常好的,但是多个模块无法区分哪些特定的 这些存储库应
该绑定。
示例
7.
使用带有注释的域类的存储库定义
//(
*,
;:
/
*,
(
*,
;%
*,
/ 引用 / 用 -/' 注释注释;:,因此这个存储库显然属于
-/'。 使用 注释与 数据 .6 的;% 注释。
剩余60页未读,继续阅读
安全验证
文档复制为VIP权益,开通VIP直接复制

评论1
最新资源