QCon 演讲火热征集中,快来分享技术实践与洞见! 了解详情
写点什么

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:001988
用户头像

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

关注

评论

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

面试阿里Java岗,技术总监真正关心的核心能力是什么?

Java架构追梦

Java 编程 架构

Soul 网关源码阅读(一) 概览

Java 源码阅读 网关

Soul 网关源码阅读(三)请求处理概览

Java 源码阅读 网关

极客训练营知识点思维导图

jorden wang

PHP转JAVA开发30分钟实战攻略

dothetrick

Java php

2021字节、华为、滴滴Java内部面试题(含答案),新鲜出炉!

比伯

Java 编程 架构 面试 程序人生

Soul 网关源码阅读(四)Dubbo请求概览

Java 源码阅读 网关

解读容器的 2020:寻找云原生的下一站

阿里巴巴云原生

Docker 云计算 Serverless 容器 云原生

Java 程序经验小结:剖析@SuppressWarinings注解

后台技术汇

28天写作

架构师第8周作业

Geek_xq

百度面试被算法血虐,闭关29天肝完445页算法神仙笔记成功入职字节跳动!

Java架构之路

Java 程序员 架构 面试 编程语言

矿机挖矿软件系统开发|矿机挖矿APP开发

系统开发

Soul 网关源码阅读(二)代码初步运行

Java 源码阅读 网关

2021年,字节/百度/阿里相继发布50W+优质Java岗(含内部面试真题及答案)

996小迁

Java 程序员 架构 面试

技术人员如何写好周报

猿话

特斯拉自建ERP的背后

明道云

物流快递公司APP架构设计

jorden wang

iOS性能优化 — 五、App启动优化

iOSer

ios 性能优化 性能分析

在数据分析、挖掘方面,有哪些ETL工具值得推荐?

敏捷调度TASKCTL

大数据 kettle 海豚调度 批量任务 ETL

从CPU到XPU进化,英特尔对业界放了什么大招?

E科讯

智能量化对冲搬砖套利交易软件APP系统开发

系统开发

二本学渣考研失败,为什么Android要采用Binder作为IPC机制?已开源

欢喜学安卓

android 程序员 面试 移动开发

初识ClickHouse——安装与入门

Simon

Clickhouse

架构师训练营第十三周笔记

李日盛

笔记

训练营第十三周作业

大脸猫

华云大咖说|企业混合云构建之道

华云数据

云计算 桌面云

Nginx 的负载均衡模式有哪些?它的实现原理是什么?

李尚智

nginx 架构 微服务

GitHub标星150K的神仙笔记,3个月肝完成功面进美团定级3-2

Java架构之路

Java 程序员 架构 面试 编程语言

安卓开发实战!闭关在家37天“吃透”这份345页PDF,成功定级腾讯T3-2

欢喜学安卓

android 程序员 面试 移动开发

从姚安娜出道说起

三只猫

28天写作 社交泛娱乐

架构师第八周总结

Geek_xq

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