Java 8:对速度3.0.1“森林”流ORM的更深入了解

沿着这条路

我一直在为开源项目Speedment (它是Stream ORM Java Toolkit和Runtime)做出贡献,并且刚刚发布了一个新的主要版本3.0.1“ Forest”。 版本的发布以加利福尼亚州帕洛阿尔托的大街小巷命名,大多数贡献者都在这里工作。 沿Middlefield Road向南行驶,每个新的主要发行版本都获得了新的名称。 新版本现已模块化,可帮助开发人员保持良好的步伐。 Speedment用户还拥有大量新功能,在本文中,我们将探讨一些发现的东西!

坚持不懈

现在,习惯于较早的ORM的人们可以在从数据库创建,更新或删除实体时以相同的方式使用Speedment。 例如,我们可以在数据库“ JPA样式”中创建实体,如下所示:

Hare hare = new HareImpl();
hare.setName("Flopsy");
hare.setAge(1);
hare.setColor("Gray");

entityManager.persist(hare);  // Persists (=inserts) the new Hare in the database

虽然这不是什么大变化,但仍然很方便。

声明式流组成

速度数据库查询表示为对标准Java 8流的操作。 在新版本中,Speedment API提供了返回函数而不是直接对对象进行操作的方法。 这简化了称为“声明性流组合”的操作,这仅意味着编写流变得更加容易和高效。

让我们仔细看一个示例,在该示例中,我们希望联接来自两个不同表的对象。 我们有两个表“ hare”和“ carrot”,其中“ carrot”具有一个名为“ owner”的字段,该字段是“ hare”。“ id”列的外键。 任务是构建一个包含所有Hare实体作为键的Map,并通过其外键将属于特定Hare的Carrot实体列表作为值。 可以这样表示:

Map<Hare, List<Carrot>> joinMap = carrots.stream()
    .collect(
        groupingBy(hares.finderBy(Carrot.OWNER)) // Applies the finderBy(Carrot.OWNER) classifier
    );


goupingBy()方法需要一个
Function ,从一个映射 CarrotHare实体。 因此,通过处理返回函数的方法,我们的代码变得非常紧凑。 这也开辟了未来优化流的方法,因为可以在启动流之前在流管道中识别和分析这些功能。 应该注意的是 collect()groupingBy()方法是标准的Java 8方法。

更好的代码生成

Speedment根据数据库架构数据自动生成代码。 Speedment的一件好事是,我们可以看到,理解和更改生成的代码。 与其他ORM相比,这使事情变得“不可思议”,并将显影剂置于驾驶座上。 新的代码生成功能包括:

支持原始类型

现在我们可以使用原始类型
int
long或 将列double ,并提高执行速度和内存使用率。 可空字段可以映射到专用字段 Optional类型,例如 OptionalInt OptionalLongOptionalDouble Double与Java 8代码样式一致。

模块化代码生成

我们可以插入自己的代码生成逻辑并改编默认代码生成器。 这对于可能更深入地了解我们的领域模型并希望利用该知识的开发人员来说非常方便。 通过自定义代码生成器添加新功能时,这些新功能将立即应用于所有生成的代码。 对代码进行编码并获得利用!

兼容模式

一些较旧的解决方案不准备用于
Optional字段,因此添加了新的“兼容性”模式,例如,将返回一个可为空的整数作为
Integer而不是 OptionalInt

可配置名称空间

现在,我们可以配置代码生成器,以将实体,管理器和配置对象分别放置在任何名称空间上。 这对模块化项目很有用。

改进的代码渲染器

Speedment使用模型视图控制器(MVC)范例进行代码生成。 这意味着代码模型(是抽象语法树)与实际的代码呈现(视图)是分开的。 视图已经更新和改进,因此它可以生成更好的代码。

校验和保护

手动更改类受校验和保护,以便即使我们决定更改名称空间,也可以保留它们。

类型安全性提高

现在,Speedment可以将采用小字符串集的值的列映射到Enums,从而进一步提高类型安全性。 当生成的代码使用Enum时,编译器将尽早发现数据库模型与业务逻辑中使用的值之间的任何不匹配,而不是在开发周期的后期发现。

改进日志记录以提高透明度

Speedment有一个新的日志记录系统,使我们可以查看发送到数据库的确切SQL代码。 这有利于提高透明度,并使我们能够准确地了解引擎盖下的情况。 我们可以轻松地启用所有CRUD操作的日志记录,如下所示:

HaresApplication loggingApp = new HaresApplicationBuilder()
    .withPassword("secretDbPassword")
    .withLogging(STREAM)
    .withLogging(PERSIST)
    .withLogging(UPDATE)
    .withLogging(REMOVE)
    .build();

Manager<Hare> hares = loggingApp.getOrThrow(HareManager.class);

long oldHares = hares.stream()
    .filter(Hare.AGE.greaterThan(8))
    .count();

System.out.println("There are " + oldHares + " old hares");

这将产生以下日志:

2016-10-19T20:50:21.957Z DEBUG [main] (#SELECT) - 
    SELECT COUNT(*) FROM `hares`.`hare` WHERE (`hares`.`hare`.`age` > ?), values:[8]

There are 30 old hares

改进的用户界面

图形工具已在许多方面得到改进。 现在,我们得到警告和提示,可以为我们提供更好的指导。 添加了几个代码生成器配置选项,当我们选择不同的配置对象时,我们还会看到更多相关信息。

新的Maven目标

有两个新的Maven目标; “清除”和“重新加载”,可用于自动化和简化构建过程。 目标“清除”将删除所有生成的代码(未手动更改),并且“重新加载”直接从现有数据库(元数据)重新加载域模型。

旋转一下

在GitHub上查看开放源代码Speedment,那里还有Wiki快速入门指南 。 随时提供反馈,并通过Gitter参加讨论。

安全驾驶!

翻译自: https://www.javacodegeeks.com/2016/10/java-8-closer-look-speedment-3-0-1-forest-stream-orm.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值