【AICon】AI 基础设施、LLM运维、大模型训练与推理,一场会议,全方位涵盖! >>> 了解详情
写点什么

Speedment 发布了 Stream ORM 3.0.1 版

  • 2016-12-28
  • 本文字数:2785 字

    阅读完需:约 9 分钟

Speedment 发布了 3.0.1 版的 Java 工具包和运行时应用。Speedment 是基于 Java Stream 的对象关系映射(ORM)产品,名称源自“速度”(Speed)和“开发”(Developement)两个词的混合。Speedment 意在提高数据库程序的开发速度,最早面市于 2015 年 6 月,其技术措施包括降低 ORM 复杂度、抽象化数据库连接配置以及执行数据上的操作。

此次发布版本的新特性包括:

  • 符合 JPA 规范的的对象持久化;
  • 声明式的 Java 8 Stream API,用于数据库操作;
  • 更好的代码生成:
    • 支持原始类型;
    • 改进的日志功能;
  • 改进的用户接口:
    • 版本检查;
    • 高亮潜在问题;
    • 更好的输出控制台;
    • 数据库合并“重加载”的改进;
    • 对每个表具有可设置的包名;
    • 原生域映射;
    • 新的 Maven 编译目标:“clear”和“reload” 。

Speedment 开源版支持下列数据库:

Speedment 企业版支持 Oracle 等商业数据库。

入门指南

下面的命令启动了一个 Speedment 的应用编译,其中使用了 Maven 和已有的 MySQL 数据库。

复制代码
mvn archetype:generate -DgroupId=org.redlich.publications
-DartifactId=publications -DarchetypeArtifactId=speedment-archetype-mysql
-DarchetypeGroupId=com.speedment.archetypes -DinteractiveMode=false
-DarchetypeVersion=3.0.1 && cd publications && mvn speedment:tool

该命令将创建一个由 -DartifactID 选项所指定的子目录,改变工作路径至该目录,并启动如下图所示的 Speedment 工具:

在输入数据库名后,点击“Connect”按钮就会连接到 MySQL 数据集,并导入如下图所示的模式:

用户填写了项目信息后,点击“Generate”按钮,该工具就会生成操作数据库表的 Java 源代码,并生成可编辑的通用 Main.java 文件,在其中编写操作数据库的声明式 Java Stream 代码。

对于 PostgreSQL 和 MariaDB 数据库,下面的命令行参数需要替换为适当的内容:

-DarchetypeArtifactId=speedment-archetype-postgresql

-DarchetypeArtifactId=speedment-archetype-mariadb

这样在添加任何数据库操作代码之前,该项目就已可编译和运行:

mvn compile && mvn exec:java -Dexec.mainClass="{package}.Main"Speedment 的 API入门指南页面中给出了实现初始化、持久化、更新和连接等数据库操作的Java 8 Stream 代码例子。在Github代码库中还提供了一个完整项目的例子。

Speedment 的 CTO Per-Åke Minborg 向 InfoQ 介绍了该产品的最新发布版本。

InfoQ:您在 Speedment 担任什么职位?

Minborg:我是 Speedment 的合伙创始人并任 CTO。作为 CTO,我领导了技术开发及 Speedment 对 Java 社区的贡献。

InfoQ:和 Hibernate、jOOQ 和 Apache Torque 等其它的 Java ORM 架构相比,Speedment 具有哪些独到之处?

Minborg: Speedment 解决了已有关系数据库与当前基于 Java 8 Stream 应用间的无缝关联问题。Java 开发人员用声明式 Stream 操作方式表述他们所有的数据操作需求,由 Speedment 框架决定所创建的数据流水线中,哪些部分最好应由数据库引擎处理,哪些部分应交给 JVM 处理。这样 Java 应用代码就可以处理复杂的数据操作,无需使用任何数据查询语言。由于数据库接口代码是系统生成的,所以任何数据库数据模型的更改将会自动提交给 Java 应用,这使得当数据库模型随时间的不断变化时,开发人员可以使用编译器发现数据库和应用间所产生的所有不匹配。在 https://dzone.com/articles/declarative-programming-with-speedment-30 中给出了更详细的信息。应用数据处理的 Java 部分可用声明式方式实现,这种方式在 Speedment 之前没有任何产品提供。

与此形成对比的是,使用Hibernate的 Java 开发人员需要用特定的语言和数据库通信,数据库查询将表述为十分类似于 SQL 的 HQL 语言。这意味着如果数据库模型随时间发生了变化,在运行时将会发现所有应用代码上的不匹配。因此使用两种语言易于出错,并产生了高维护代价。此外,由 Stream 所提供的 Java 8 函数式编程模式在本质上是声明式的,Java 和 HQL 间的语言障碍破坏了引入声明式编程的目的。在 https://dzone.com/articles/streams-in-hibernate-and-beyond 中给出了更多概念上的主要差异。

Hibernate 假定 Java 开发人员需要直接面对查询语言。jOOQ同样基于此假定构建,它使得由 Java 构建实际 SQL 代码的过程更加清晰。虽然在很多方面上 jOOQ 比 Hibernate 更加简洁,但它与 Hibernate 一样是显式聚焦于查询语言上的,而这在 Speedment 中用抽象的方式实现。

Apache Torque假定数据使用 XML 建模,而非 Java 或 SQL。这非常适合从头开始构建的项目,在项目中很少甚至不需要与需实际生成 SQL 的数据模型保持一致。正因为数据模型的表示是独立于数据库引擎之外的,Apache Torque 不允许任何对已有关系数据库的完全迁移路径,也不允许用户使用任何数据库特有的特性。

Speedment 架构在使用其它的数据源时,例如驻留 JVM 内存的数据库,可不必更改 Java 应用代码,而是通过配置实现,这是将查询语言从 Java 代码中抽象分离出来所提供的另一个特性。Speedment 的数据操作流水线让 Java 应用去描述对数据所要做的操作,这样 Speedment 框架可以自由地决定操作的实现方式,这就是 Speedment Insane Mode 的工作方式。这种自由彻底地改变了数据的检索方式,而不会影响到 Java 应用逻辑。而上面所提到的所有框架都不具备这类能力,因为这些应用构建的框架是基于查询语言的,这将不可避免地绑定到特定的数据检索模型。

InfoQ:对于开发人员和组织在什么情况下应考虑选用 Speedment 企业版,您有哪些建议?

Minborg: Speedment 开源版用于开源数据库。对于使用 Oracle 等商业数据库的用户,需要具有数据库连接器的企业版基本许可。该许可中包括了服务和支持。

此外,具有企业版高级许可的客户可使用 Speedment Insame Mode 功能,该功能可成倍地加速应用响应。

许可中还包括驻留 JVM 数据(In-JVM Data)技术,该技术可缓解性能瓶颈问题。

InfoQ:能为我们介绍一下 Speedment 的合作厂商和用户情况吗?

Minborg:我们已有数千遍布全球的开源产品用户。Speedment 企业版也被一些大公司所使用,涉及了通信、银行、保险、能源和物流等行业。合作厂商和客户有 Vaadin Sencha Higher Frequency Trading Extremely Heavy Industries 等。

InfoQ:下一步 Speedment 将如何发展?

Minborg:我们正探索在产品试用版中添加更多的特性,使开发人员可在测试环境中免费使用软件。其中将会考虑把 In-JVM-Memory Insane Mode 作为开发人员许可的一部分。

我们将添加与 Spring Boot 和 Vaadin 框架的集成。我们也正在持续添加面向更多数据源的连接器。当然我们还将支持 Java 9。

查看英文原文: Speedment Releases Stream ORM Version 3.0.1


感谢冬雨对本文的审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ @丁晓昀),微信(微信号: InfoQChina )关注我们。

2016-12-28 18:001820
用户头像

发布了 227 篇内容, 共 71.5 次阅读, 收获喜欢 27 次。

关注

评论

发布
暂无评论
发现更多内容

架构实战营模块二作业

zhongwy

架构实战营 「架构实战营」

圣诞节快到了,何不送给Ta一份程序员的浪漫

海拥(haiyong.site)

前端 代码中的浪漫 圣诞节 28天写作 12月日更

模块7学习总结

Geek_1d37ea

架构实战营

49 K8S之Envoy代理程序

穿过生命散发芬芳

k8s 28天写作 12月日更

如何做一个区块链浏览器

Rayjun

区块链 区块链浏览器

在不丢失数据的情况下处理屏幕旋转 - Android

坚果

android 28天写作 12月日更

第二周作业

cqyanbo

项目已成为组织发展的必要手段、企业成长的发动机

Seven的代码实验室

项目管理

Linux之cat命令

入门小站

Linux

=>符号使用场景

喵叔

28天写作 12月日更

服务端质量保证体系(四) 测试环境治理

homber

服务端 质量保证 测试环境 签约计划第二季

架构实战营模块二作业

lchx08

「架构实战营」

ArgoCD 简明教程

Se7en

架构实战模块二作业

青青子衿

模块7作业

Geek_1d37ea

架构实战营

架构训练营第四期-作业2

supermenG

架构师训练营 4 期

homework02

王欣欣

「架构实战营」

如何把新用户转化为活跃用户

石云升

AARRR 产品思维 28天写作 产品增长 12月日更

在线JSON转BigQuery工具

入门小站

工具

实用机器学习笔记十八:过、欠拟合

打工人!

机器学习 深度学习 算法 学习笔记 12月日更

元宇宙

圣迪

区块链 数字孪生 元宇宙 进化的力量 扩展现实

-exec rm 与 xargs rm -rf 深度剖析

liuzhen007

28天写作 12月日更

模块三作业

Vincent

「架构实战营」

王者荣耀商城异地多活架构设计

奔奔

作业作业作业作业作业作业作业作业作业作业作业作业作业作业作业作业作业作业作业作作业作业作业作业作业作业作业作业作业作业作业作业作业作业作业作业作业作业作业业作业作业作业作业作业作业作业作业作业作业作业作业作业

AUV

「架构实战营」

学习总结 2021.12.19

mj4ever

学习笔记

事业的智囊团,精神的后花园(19/28)

赵新龙

28天写作

别做消费主义的祭品

mtfelix

微信朋友圈高性能架构

Only

架构实战营 「架构实战营」

MQTT X v1.7.0 正式发布:MQTT 5.0 支持最为完整的客户端工具

EMQ映云科技

物联网 IoT mqtt

轻松容器化golang应用程序

xcbeyond

golang Docker 28天写作 12月日更

Speedment发布了Stream ORM 3.0.1版_Java_Michael Redlich_InfoQ精选文章