在 Quarkus 上使用 Kotlin 简化 Java 持久化实现

本文演示了 Quarkus 如何使开发人员能够使用 Kotlin 编程 API 为反应式 Java 应用程序简化 JPA 实现。
1 位读者喜欢这篇文章。
Business woman on laptop sitting in front of window

图片来自 Mapbox Uncharted ERG, CC-BY 3.0 US

几十年来,开发人员一直在努力优化持久层实现,包括存储业务数据、快速检索相关数据,以及——最重要的是——简化数据事务逻辑,而无需考虑编程语言。

幸运的是,这一挑战促成了 Java 生态系统的发明,开发人员可以在其中实现 Java 持久化 API (JPA)。 例如,带有 Panache 的 Hibernate 对象关系映射器 (ORM) 是 Java 生态系统中 JPA 实现的标准框架。

Kotlin 是一种编程语言,旨在与 Java 虚拟机 (JVM) 上的多种编程语言一起运行业务应用程序,用于 Java 持久化实现。 但是,Java 开发人员仍然需要赶上 Kotlin 的新语法和 JPA API。

本文将解释 Quarkus 如何通过 Quarkus Hibernate ORM Panache Kotlin 扩展使开发人员更容易实现 Kotlin 应用程序。

使用 Quarkus CLI 创建新的 Hibernate ORM Kotlin 项目

首先,使用 Quarkus 命令行工具 (CLI) 创建一个新的 Maven 项目。 以下命令将添加 Quarkus 扩展以启用 Hibernate ORM Panache KotlinPostgreSQL JDBC 扩展

$ quarkus create app hibernate-kotlin-example \
 -x jdbc-postgresql, hibernate-orm-panache-kotlin

输出应如下所示

...
<[SUCCESS] ✅ quarkus project has been successfully generated in:
--> /Users/danieloh/Downloads/demo/hibernate-kotlin-example
...

创建新的实体和存储库

带有 Panache 的 Hibernate ORM 使开发人员能够以活动记录模式处理实体,具有以下优点

  • 自动生成 ID
  • 无需 getter/setter
  • 用于访问的超级有用的静态方法,例如 listAll()find()
  • 基本操作无需自定义查询(例如,Person.find ("name", "daniel"))

Kotlin 不支持以 Java 相同的方式使用带有 Panache 的 Hibernate ORM。 相反,Quarkus 允许开发人员使用 companion 对象将这些功能引入 Kotlin,如下所示

@Entity(name = "Person")
class Person : PanacheEntity() {
lateinit var name: String
}

这是一个简单的示例,说明开发人员如何实现 PanacheRepository 来访问实体

@ApplicationScoped
class PersonRepository: PanacheRepository<Person> {
fun findByName(name: String) = find("name", name).firstResult()
}

超级简单! 现在我将向您展示如何实现资源以通过 RESTful API 访问数据。

创建资源以处理 RESTful API

Quarkus 完全支持上下文和依赖注入 (CDI),这允许开发人员注入 PersonRepository 以访问资源中的数据(例如,findByName(name))。 例如

@Inject
lateinit var personRepository: PersonRepository

@GET
@Produces(MediaType.TEXT_PLAIN)
@Path("/{name}")
fun greeting(@PathParam("name") name: String): String {
return "Hello ${personRepository.findByName(name)?.name}"
}

运行并测试应用程序

与往常一样,使用开发人员模式运行您的 Quarkus 应用程序

$ cd hibernate-kotlin-example
$ quarkus dev

输出应如下所示

...
INFO [io.quarkus] (Quarkus Main Thread) Profile dev activated. \
Live Coding activated.
INFO [io.quarkus] (Quarkus Main Thread) \
Installed features: [agroal, cdi, hibernate-orm, \
hibernate-orm-panache-kotlin, jdbc-postgresql, \
kotlin, narayana-jta, resteasy, smallrye-context-propagation, vertx]

--
Tests paused
Press [r] to resume testing, [o] Toggle test output, \
[:] for the terminal, [h] for more options>

Quarkus Dev 服务 在您运行容器运行时(例如 Docker 或 Podman)并添加数据库扩展时,会自动启动相关的数据库容器。 在此示例中,我已经添加了 jdbc-postgresql 扩展,因此当 Quarkus Dev 模式开始时,PostgreSQL 容器将自动运行。 在我的 GitHub 存储库中查找解决方案。

访问 RESTful API (/hello) 以按 name 参数检索数据。 在本地终端中执行以下 curl 命令行

& curl localhost:8080/hello/Daniel

输出应如下所示

Hello Daniel

结论

这是对 Quarkus 如何使开发人员能够使用 Kotlin 编程 API 为反应式 Java 应用程序简化 JPA 实现的基本解释。 开发人员还可以在 Quarkus 中继续使用 Kotlin 编程进行开发时获得更好的开发人员体验,例如开发服务和实时编码。 有关 Quarkus 的更多信息,请访问 Quarkus 网页。

danieloh
技术营销、开发人员倡导者、CNCF 大使、公共演说家、出版作家、Quarkus、Red Hat 运行时

评论已关闭。

Creative Commons License本作品采用知识共享署名-相同方式共享 4.0 国际许可协议进行许可。
© . All rights reserved.