1. 概述
在本教程中,我们将了解一些 JPA 支持工具。我们将重点关注 两种最流行的 IDE 可用的插件:IntelliJ IDEA 和 Eclipse 。
2. IntelliJ IDEA 和 Eclipse 中的 JPA 支持
JPA 是 Java 应用程序中使用最广泛的关系数据库规范。事实上, JPA 定义了实现的各个方面,从注释到数据处理规则。
通常,我们不仅仅处理 JPA 实体。除了纯粹的 ORM 相关代码之外,我们可能还需要数据库版本控制系统、SQL/JPQL/HQL 查询优化、与 IoC 容器集成等。这就是插件发挥巨大作用的地方。它们可以支持数据库逆向工程、模式生成、迁移脚本生成或 Spring Data JPA 存储库脚手架。
当在应用程序开发中使用 JPA 框架时,通常是在 IDE 的帮助下完成的。这是因为它们为我们提供了 一套强大的工具来提高开发人员的生产力:
- 样板代码生成
- 数据库逆向工程
- 数据对象定义生成
- 适用于 Java 和 JPQL 的高级代码自动完成功能
- JPA 特定的代码建议
- ETC。
让我们看一下两种最常见的 IDE — IntelliJ IDEA 和 Eclipse — 并了解它们在 JPA 应用程序开发支持方面提供的功能。
3.IntelliJ IDEA
IntelliJ IDEA 有两个版本:社区版(免费)和旗舰版(付费)。 Ultimate 版本有一个支持 JPA 的捆绑插件。
另一方面,社区版不提供对 JPA、Hibernate、Spring Data 等的专门支持。
然而,IntelliJ 拥有广阔的市场和不同的插件。因此,我们几乎可以找到对任何技术的支持,JPA也不例外。
对于 IntelliJ IDEA 社区用户,我们将介绍JPA Buddy插件 以支持 JPA 功能。尽管如此,它也可以成为 IntelliJ IDEA Ultimate 的一个很好的补充。
3.1. IntelliJ Ultimate 的 JPA 插件
该插件提供了一组高级功能,包括:
- JPA 实体的 ER 图
- 持久化工具窗口
- 数据库逆向工程
- JPA控制台用于测试JPQL语句并生成DDL脚本
- JPA 特定的代码检查和完成
在IntelliJ IDEA Ultimate中我们可以使用一个专用的工具窗口——“持久化”。这将显示项目中 JPA 实体的结构。
在这个视图中,我们可以使用可视化工具创建实体属性和关系:
“持久性”窗口还允许使用代码编辑器中的装订线图标在代码及其相关实体层次结构之间快速导航。
我们还可以利用逆向工程过程。它将为我们生成 JPA 实体、关联和适当的注释。此外,它还会创建 pesistence.xml 文件或更新该文件(如果存在)。
除了通用的 JPA 支持之外,如果我们选择 Hibernate 作为 JPA 实现,它将提供额外的帮助。我们可以执行 Hibernate 特定的操作,例如(但不限于):
- 管理配置和映射文件
- 在HQL控制台中执行HQL查询
Youtube上有详细的评论显示了该插件的实际运行情况。
3.2. JPA 好友
JPA Buddy提供了一组可视化编辑器来使用 JPA 实体和 Spring Data JPA 存储库。此外,它还支持 Java 和 Kotlin 语言。
让我们看看它提供的主要功能:
- 可视化工具和代码导航
- Hibernate bean 验证支持
- Hibernate 类型和 JPA 转换器支持
- 数据库版本控制工具支持(Liquibase 和 Flyway)
- JPA 特定的代码检查
- Kotlin 支持
- Spring Data Repository 可视化设计器
我们不需要记住所有 JPA 注释、Spring 数据存储库方法命名规则或 Liquibase 标签。该插件允许我们从调色板中选择所需的项目。
因此, 它使我们能够在可视化编辑器中更新它们的属性, 而不是编写代码:
JPA Buddy 解决的另一个挑战是数据库版本控制 。该插件支持 Liquibase 和 Flyway 工具,并可以相应地生成 XML 或 SQL 迁移脚本。
JPA Buddy 通过将项目数据库与代码库中定义的实际 JPA 实体进行比较来生成脚本。生成后,我们可以查看生成的脚本并更新它们,然后再将它们保存到代码库。
除此之外,该 插件还引入了一些智能检查和快速修复 ,例如:
- 实体代码中缺少 ID 字段
- 无参数构造函数缺失
- Lombok 使用的潜在问题(例如不正确的 equals() 和 hashCode() 定义)
除了 JPA 支持之外,该插件 还可以帮助创建 Spring Data JPA 存储库 。它提供了可视化编辑器,可以帮助我们正确命名存储库方法。
4.日食
众所周知,Eclipse 有一个庞大的插件生态系统。尽管如此, Dali Tools 插件仍然是 Eclipse IDE 中 JPA 支持的事实上的标准 。
让我们探索一下这个插件。然后,我们将了解如果我们在项目中使用 Hibernate,如何获得一些额外的支持。
4.1.大理工具
Dali几乎涵盖了JPA开发的所有领域 。其功能包括(但不限于):
- JPA 实体的 ER 图
- 可视化编辑器和导航器
- 基于JPA模型的DDL(SQL)生成
- 数据库逆向工程
该插件提供了 两种主要的可视化工具 。上下文相关的“JPA 详细信息”编辑器允许我们使用不同的 JPA 对象,我们可以在“JPA 结构”导航器中选择这些对象:
我们可以选择和更改:
- 实体定义,包括命名查询(使用 JPQL 代码辅助)
- 实体属性和关联:一对多、多对一等。
- orm.xml 文件。我们可以编辑项目的默认映射和持久性信息
此外,专用的 persistence.xml 编辑器使我们能够避免记住根据 JPA 规范在此配置文件中可以使用的所有参数。我们可以编辑从连接选项到锁定超时或验证模式的所有内容。
Dali Tools插件 可以基于JPA模型为特定数据库生成并执行DDL SQL 。此外,执行阶段与生成阶段是分开的,因此我们可以在将生成的 SQL 应用到应用程序的数据库之前对其进行检查。
数据库逆向工程过程设置允许我们更改实体代码中的以下选项:
- PK生成策略
- 现场访问政策
- 关联获取策略
- 集合属性类(List、Set、...)
4.2. JBoss 休眠工具
如果我们需要专门针对 Hibernate 的支持,让我们看看有什么选择。在Eclipse插件存储库中,我们可以找到Jboss Hibernate Tools插件。
该插件可以单独使用,也可以与 JPA Tools 结合使用 ,并提供:
- 代码生成工具,包括逆向工程和重构
- 高级 Hibernate 配置和映射文件显示和编辑
- HQL执行控制台和SQL预览
- 数据模型导出
逆向工程工具允许配置许多选项,包括表名掩码、类型映射,您甚至可以从生成的实体类中排除某些列:
生成的 JPA 实体可以表示为具有 *.hbm.xml 映射文件的 POJO 或带注释的类。此外,该插件支持使用 CRUD 方法为每个实体生成 DAO 对象。 DAO 利用 Hibernate 特定的类进行数据库访问。
HQL 执行控制台和条件编辑器允许我们生成和执行 HQL 查询。除了执行任意HQL之外,控制台还提供HQL语句的SQL预览。它对于创建优化的 SQL 查询以避免“n+1 select”和其他 ORM 边缘情况非常有用。
5. 结论
在本文中,我们介绍了最流行的 Java IDE 中提供的几种支持 JPA 的工具:IntelliJ IDEA 和 Eclipse。
我们看到了这些如何在开发过程中帮助编写更好的应用程序并提高生产力。因此,在为工作选择最佳工具时,我们不仅应该关注“纯 JPA”功能,还应该关注与 IDE 和所选开发堆栈的集成。