Spring Data
Spring Data JPA 是更大的 Spring Data 家族的一部分,使得能够快速实现基于 JPA 的代码库变得容易。 JPA Buddy 提供一个清晰的用户界面,用于生成 Java 和 Kotlin 实体的存储库、投影、查询等。 要启用这些功能,您的项目应包含 安装指南中提到的依赖项。
仓库创建
JPA Buddy 提供多种方式创建仓库,使大多数用户使用与 JPA 相关的对象更加方便。 项目中生成存储库的所有可能方法都在以下视频中显示:
在“New JPA Repository”窗口中,您可以设置:
将创建库的实体
存储库类的名称
存储库的父类。 它可以是:
您项目中的任何存储库
存储库是否会继承 JpaSpecificationExecutor
源根目录
创建存储库的包名

为每个实体一个个创建 Spring Data 仓库可能会成为一项繁琐的工作。 有了 JPA Buddy,您可以加速这一过程。 要同时为多个 JPA 实体创建存储库,您需要执行三个步骤。 在项目树中选择实体,调用 JPA Buddy 向导,然后调整您的选择。 就是这样! 看看这个功能如何加速开发过程:
JPA 结构存储库
JPA Buddy 将每个实体的所有存储库集中在一个地方,以实现项目内最有效的导航。 无论实体的仓库位于不同项目包还是相同项目包中,这都无关紧要。 与该实体相关的所有存储库都将显示在 仓库 部分。 从这里,您可以快速移动到 repository 实现或创建一个新的实现。

查询/方法生成
Spring Data 提供了使用 @Query 注解定义查询的能力。 您可以使用 JPA Palette (1) 或 Editor Toolbar (2) 快速编写它们并避免拼写错误。 请选择以下类型的查询之一,并使用便捷的 UI 进行配置。

示例
让我们来看一个创建 Find Collection Query 的例子。

在窗口顶部,您可以定义集合和查询返回类型的换行类型。 此外,JPA Buddy 还允许您通过点击 + 按钮生成新的 Projection 接口或 DTO 类。
您还可以指定方法名。 不过,如果您将其留空,名称将根据 查询命名规范自动生成。
窗口中间包含查询条件的表格。
在窗口底部,您可以指定:
参数是否会被命名;
是否使用
Pageable参数;至关重要
最后,您可以指定要按顺序排列查询结果的字段。
对于上述配置,将生成以下查询:
同样的方法适用于派生查询方法。 可以使用 Method prefix 下拉菜单来定义所需的主题关键字并添加别名,而不是使用 Method name 字段。

这允许您自定义生成的查询方法的命名约定,从而在代码中提供灵活性和一致性。
实体 意图
JPA Buddy 还在实体属性上提供了直接进入查询/方法创建窗口的意图。 将文本光标放置在所需的属性上,按 Alt+Enter ,然后点击创建 Spring Data 存储库方法。 在打开的窗口中,选择所需的query/method类型。
未解析的引用
JPA Buddy 可以帮助那些喜欢先调用尚不存在的方法然后再实现它的开发人员。 只需编写所需的签名,然后通过特殊操作进入查询或方法创建向导:

设置
Spring Data 提供了几种用于派生查询方法名称的关键字表达式。 您可以使用 NameContaining、NameIsContaining 或 NameContains——结果是一样的。 一方面,它在方法命名上给了我们一些灵活性。 另一方面,在大团队中,对相同操作使用不同命名可能会使代码审查员和维护人员感到困惑。 如果您的开发团队已经建立了命名标准,您可以配置 JPA Buddy 仅使用批准的关键字来生成方法名称:

现有方法/查询修改
要配置方法或查询,请将光标放在其上并使用 JPA Inspector:

实体图支持
在 JPA 2.1 中引入的 EntityGraph 是最受期待的特性之一。 实体图为我们提供了另一层数据获取控制。 JPA Buddy 也支持它们,所以您可以使用方便的 GUI 向导构建图表:
查询重构
异步
Spring Data JPA 提供异步运行存储库查询的能力。 要使查询异步化,仅添加 '@Async' 注解是不够的,还需要将返回类型更改为以下之一:
Future<ClassName>CompletableFuture<ClassName>ListenableFuture<ClassName>
了解有关异步查询结果的更多信息,请参阅相应的 Spring Data JPA 文档 页。
要使查询异步,请将文本光标放在您要更改的查询上,并从下拉列表中选择结果返回类型:

动态投影
在 Spring Data JPA 中,您可以使用通用 repository 方法在运行时指定投影。 向您的存储库方法添加类型类参数,以便使用相同的查询进行不同的投影。 这使您能够在业务代码中定义首选的返回类型。
要使查询变为通用,请将文本光标放在您要更改的查询上,并勾选“动态投影”框。

查询提取
派生查询方法是定义查询的一个方便方式。 但是,随着时间的推移,它们可能会演变成庞大且不可读的结构,您可以将其转换为整洁的 @Query-注释方法。 这可以通过 JPA Buddy 轻松实现。 将文本光标置于查询上,然后在 JPA Inspector 中点击“Query extract...”。
查询自动完成
对于 IntelliJ IDEA 社区版,JPA Buddy 提供查询自动完成功能(类似于 IntelliJ IDEA 旗舰版提供的功能)。 将文本光标放在查询上,然后在 JPA Inspector 中点击“Query edit...”。
投影
有时您只需要表中的一部分列。 在这种情况下,Spring Data JPA 投影很有用,允许您仅从查询中返回所需的字段。
在 新建 Spring 投影 窗口中,您可以:
定义源根和包;
选择实体类;
为投影类设置名称;
选择您想要包含的字段。
此外,JPA Buddy 允许您为引用的实体生成 Projections。 选择关联实体,选择投影类型,并选择所需的字段。

对于上述配置,将生成以下投影:
保持 Projections 与其 JPA 实体同步
随着时间的推移,实体可能会发生变化,您需要相应地更改投影。 JPA Buddy 允许您将实体与其投影进行同步,反之亦然。 请参阅 DTO Generator 部分以了解此功能的详细信息。
投影声明设置
每个项目可能会遵循其自身的代码编写惯例。 在工具 -> JPA Buddy -> 投影声明中,您可以配置:
类名后缀.
名称模式正则表达式(当字段为空时功能被禁用)。 如果您对 Projections 使用强制命名约定,此选项很有用。 它允许 JPA Buddy 仅使用 Projection 名称将 Projection 与其 JPA Entity 关联。 要为目标 JPA 实体的简单类名指定占位符,请使用
(?<entity>.)模式。 例如,(?<entity>.*(?:Info|Prj|Projection|VO|Vo|View|Request|Browse)表示MyEntityInfo、MyEntityPrj等。 类将被视为MyEntity的投影。类注释. 定义将在 Projection 接口上生成的注释。
评论链接的正则表达式(当字段为空时,该功能被禁用)。 此选项允许 JPA Buddy 将 Projection 与其 JPA Entity 关联。 要在注释中为目标实体 FQN(全限定名)指定占位符,请使用
(?<entity>.*)模式。 那么,如果 regexp 被定义为A Projection for the \{@link (?<entity>.*)\} entity它将在以下 Javadoc 注释中解析:

实体及其投影之间的便捷导航
一旦 JPA Buddy 能够将 Projection 接口与实体关联:
Projection 接口将出现在 JPA Structure 面板的 Dto & Projections 部分和 Editor Toolbar 中(1)
在投影中将出现装订区域图标,以便于导航到其实体(2)

审核支持
在大型应用程序中,进行审计是至关重要的。 JPA Buddy 通过为常用审计字段提供注释(如 @CreatedBy、 @CreatedDate、 @LastModifiedBy 和 @LastModifiedDate ),使其变得轻而易举。 此外,JPA Buddy 会在您忘记将 @EnableJpaAuditing 注释添加到您的配置中,或未将 AuditingEntityListener 添加到当前实体时通知您。 这就更没有犯错的余地了!
标签:Spring Data、JPA、Projections、审计、DTO、查询、Repository、实体、JPQL、本机查询、动态 Projections
Blaze Persistence 支持
Blaze-Persistence 无缝集成了 Spring Data JPA,允许您在利用高级查询和优化功能的同时,从 Spring Data 的便利性和生产力中受益。 JPA Buddy 提供对该框架的支持,以创建 Entity Views 的 Spring Data JPA 存储库,但仅当项目中包含 相关库时。
从标准仓库创建窗口创建用于实体视图的 Spring Data JPA 仓库是可用的。 一旦您选择了一个 Entity View,父接口的唯一选项是 com.blazebit.persistence.spring.data.repository.EntityViewRepository 或其继任者之一。

Hibernate Envers 支持
JPA Buddy 允许您在创建 JPA 存储库时决定该存储库是否应实现 RevisionRepository 接口。 它将自动在仓库声明中插入实体类型、实体 ID 类型和修订号类型。 例如:

生成的存储库声明: