IntelliJ IDEA 2025.3 Help

Spring Data

Spring Data JPA 是更大的 Spring Data 家族的一部分,使得能够快速实现基于 JPA 的代码库变得容易。 JPA Buddy 提供一个清晰的用户界面,用于生成 Java 和 Kotlin 实体的存储库、投影、查询等。 要启用这些功能,您的项目应包含 安装指南中提到的依赖项。

仓库创建

JPA Buddy 提供多种方式创建仓库,使大多数用户使用与 JPA 相关的对象更加方便。 项目中生成存储库的所有可能方法都在以下视频中显示:

在“New JPA Repository”窗口中,您可以设置:

new-jpa-repository

为每个实体一个个创建 Spring Data 仓库可能会成为一项繁琐的工作。 有了 JPA Buddy,您可以加速这一过程。 要同时为多个 JPA 实体创建存储库,您需要执行三个步骤。 在项目树中选择实体,调用 JPA Buddy 向导,然后调整您的选择。 就是这样! 看看这个功能如何加速开发过程:

JPA 结构存储库

JPA Buddy 将每个实体的所有存储库集中在一个地方,以实现项目内最有效的导航。 无论实体的仓库位于不同项目包还是相同项目包中,这都无关紧要。 与该实体相关的所有存储库都将显示在 仓库 部分。 从这里,您可以快速移动到 repository 实现或创建一个新的实现。

jpa-structure-repository

查询/方法生成

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

jpa-palette-query

示例

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

create-query-find-collection

在窗口顶部,您可以定义集合和查询返回类型的换行类型。 此外,JPA Buddy 还允许您通过点击 + 按钮生成新的 Projection 接口或 DTO 类。

您还可以指定方法名。 不过,如果您将其留空,名称将根据 查询命名规范自动生成。

窗口中间包含查询条件的表格。

在窗口底部,您可以指定:

  • 参数是否会被命名;

  • 是否使用 Pageable 参数;

  • 等等。

最后,您可以指定要按顺序排列查询结果的字段。

对于上述配置,将生成以下查询:

@Query(""" select distinct o from Owner o where upper(o.firstName) like upper(concat(:firstName, '%')) and upper(o.lastName) like upper(concat('%', :lastName, '%')) order by o.lastName """) @Async CompletableFuture<List<Owner>> findOwners(@Param("firstName") String firstName, @Param("lastName") @NonNull String lastName, Pageable pageable);

同样的方法适用于派生查询方法。 可以使用 Method prefix 下拉菜单来定义所需的主题关键字并添加别名,而不是使用 Method name 字段。

derived-query-method-prefix

这允许您自定义生成的查询方法的命名约定,从而在代码中提供灵活性和一致性。

实体 意图

JPA Buddy 还在实体属性上提供了直接进入查询/方法创建窗口的意图。 将文本光标放置在所需的属性上,按 Alt+Enter ,然后点击创建 Spring Data 存储库方法。 在打开的窗口中,选择所需的query/method类型。

未解析的引用

对于倾向于先调用尚不存在的方法、随后再实现它的开发者,JPA Buddy 也能提供帮助。 只需编写所需的签名,然后通过特殊操作进入查询或方法创建向导:

未解析引用

设置

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

conditions-settings

现有方法/查询修改

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

jpa-inspector

实体图支持

在 JPA 2.1 中引入的 EntityGraph 是最受期待的特性之一。 实体图为我们提供了另一层数据获取控制。 JPA Buddy 也支持它们,所以您可以使用方便的 GUI 向导构建图表:

查询重构

异步

Spring Data JPA 提供异步运行存储库查询的能力。 要使查询异步化,仅添加 '@Async' 注解是不够的,还需要将返回类型更改为以下之一:

  • Future<ClassName>

  • CompletableFuture<ClassName>

  • ListenableFuture<ClassName>

了解有关异步查询结果的更多信息,请参阅相应的 Spring Data JPA 文档 页。

要使查询异步,请将文本光标放在您要更改的查询上,并从下拉列表中选择结果返回类型:

async

动态投影

在 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。 选择关联实体,选择投影类型,并选择所需的字段。

new-spring-projection

对于上述配置,将生成以下投影:

/** * A Projection for the {@link Pet} entity */ public interface PetInfo { Integer getId(); String getName(); LocalDate getBirthDate(); PetTypeInfo getType(); OwnerInfo getOwner(); /** * A Projection for the {@link PetType} entity */ interface PetTypeInfo { Integer getId(); String getName(); } /** * A Projection for the {@link Owner} entity */ interface OwnerInfo { String getFirstName(); String getLastName(); } }

保持 Projections 与其 JPA 实体同步

随着时间的推移,实体可能会发生变化,您需要相应地更改投影。 JPA Buddy 允许您将实体与其投影进行同步,反之亦然。 请参阅 DTO Generator 部分以了解此功能的详细信息。

投影声明设置

每个项目可能遵循其自己的代码编写约定。 在工具 -> JPA Buddy -> 投影声明中,您可以配置:

  1. 类名后缀。

  2. 名称模式正则表达式(当字段为空时功能被禁用)。 如果您对 Projections 使用强制命名约定,此选项很有用。 它允许 JPA Buddy 仅使用 Projection 名称将 Projection 与其 JPA Entity 关联。 要为目标 JPA 实体的简单类名指定占位符,请使用 (?<entity>.) 模式。 例如, (?<entity>.*(?:Info|Prj|Projection|VO|Vo|View|Request|Browse) 表示 MyEntityInfo、 MyEntityPrj 等。 类将被视为 MyEntity 的投影。

  3. 类注释。 定义将在 Projection 接口上生成的注释。

  4. 评论链接的正则表达式(当字段为空时,该功能被禁用)。 此选项允许 JPA Buddy 将 Projection 与其 JPA Entity 关联。 要在注释中为目标实体的 FQN(Fully Qualified Name)指定占位符,请使用 (?<entity>.*) 模式。 那么,如果 regexp 被定义为 A Projection for the \{@link (?<entity>.*)\} entity 它将在以下 Javadoc 注释中解析:

/** * A Projection for the {@link Pet} entity */
projection-declaration

实体及其投影之间的便捷导航

一旦 JPA Buddy 能够将 Projection 接口与实体关联:

  • Projection 接口将出现在 JPA 结构面板的 Dto & Projections 部分以及编辑器工具栏(1)中

  • 在投影中将出现装订区域图标,以便于导航到其实体(2)

projection-navigation

审核支持

在大型应用程序中,进行审计是至关重要的。 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 或其继任者之一。

blaze-persistence-spring-data-repository.png
import com.blazebit.persistence.spring.data.repository.EntityViewRepository; import com.example.blazepersistence.view.BaseView; public interface BaseViewRepository extends EntityViewRepository<BaseView, Long> { }

Hibernate Envers 支持

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

@Entity @Table(name = "book") public class Book { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "id", nullable = false) private Long id; }
修订库

生成的存储库声明:

public interface BookRepository extends JpaRepository<Book, Long>, RevisionRepository<Book, Long, Integer> { }
2026年 1月 23日