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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/351354.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

读《人月神话》有感

翻开《人月神话》这本书&#xff0c;我感觉看这本与我们学的相关的书不相似&#xff0c;书中用了很多的形象的比喻&#xff0c;来阐述项目管理中的一些问题&#xff0c;让人以很轻松愉悦心态去阅读。书开始就形象有有趣的把软件危机比作&#xff1a;焦油坑。让我感觉到&#xf…

android 弹窗in,Android监听程序处于INACTIVITY(未操作状态)时间并作出相应的操作

最近遇到一个需求&#xff0c;app五分钟未操作需要返回到主页面。一开始就想到去监听onTouch和onClick事件&#xff0c;这个方法看似可行&#xff0c;但是实际操作起来还是很繁琐的&#xff0c;一不小心就达不到需要的效果。然后就果断放弃了。后来看api发现activity中有一个叫…

用gdb调试nasm汇编程序

对于一个程序员来说&#xff0c;调试是很重要的&#xff0c;可以节约找到bug的时间&#xff0c;不过以前在linux下一直是对c进行调试的&#xff0c;今天突然要对汇编进行调试还真不知道怎么调&#xff0c;特别是对linux下调试汇编程序基本没搞过。记得以前上课学masm时&#xf…

android 防腾讯新闻标题栏,仿腾讯视频android客户端上方的标题栏

如图&#xff0c;上方的导航栏是不是很酷&#xff0c;首先它本身是可以滑动的&#xff0c;然后右侧有一个可以查看所有Tab的按钮&#xff0c;然后他和下方的ViewPager还是联动的&#xff0c;可以通过点击它切换ViewPager&#xff0c;并且ViewPager滑动&#xff0c;它也会随着改…

链接克隆 完整克隆_深入克隆

链接克隆 完整克隆在继续克隆概念之前&#xff0c;让我们用对象创建概念刷新基础知识。 使用new运算符创建对象时&#xff0c;对象将在堆中获取内存分配。 堆中的对象创建 在Java中&#xff0c;理想情况下仅通过引用变量修改对象&#xff0c;即仅复制对象的内存地址&#xff…

linux系统调用和库函数调用的区别

Linux下对文件操作有两种方式&#xff1a;系统调用&#xff08;system call&#xff09;和库函数调用&#xff08;Library functions&#xff09;。可以参考《Linux程序设计》&#xff08;英文原版为《Beginning Linux Programming》&#xff0c;作者是Neil Matthew和Richard S…

如果您在2016年编写过Java代码-这是您不容错过的趋势

2016年最有趣的Java相关主题 关于代码&#xff0c;有很多热门话题&#xff0c;而要跟上所有事情&#xff0c;这是一项全职的工作。 如果您想知道如何从谷壳中分离出小麦&#xff0c;我们已经为您完成了工作。 在下面的文章中&#xff0c;我们将介绍2016年最热门的内容&#x…

第三届蓝桥杯省赛---第39级台阶

第39级台阶 小明刚刚看完电影《第39级台阶》&#xff0c;离开电影院的时候&#xff0c;他数了数礼堂前的台阶数&#xff0c;恰好是39级! 站在台阶前&#xff0c;他突然又想着一个问题&#xff1a; 如果我每一步只能迈上1个或2个台阶。先迈左脚&#xff0c;然后左右交替&#xf…

android 视图覆盖,如何在Android中添加覆盖视图超过其他视图?

设为背景&#xff01;只是开玩笑…你需要的是把你的意见放在一个RelativeLayout里.会有什么工作&#xff1a;xmlns:android"http://schemas.android.com/apk/res/android"android:layout_width"fill_parent"android:layout_height"fill_parent"&…

Linux内核源码分析方法

一、内核源码之我见 Linux内核代码的庞大令不少人“望而生畏”&#xff0c;也正因为如此&#xff0c;使得人们对Linux的了解仅处于泛泛的层次。如果想透析Linux&#xff0c;深入操作系统的本质&#xff0c;阅读内核源码是最有效的途径。我们都知道&#xff0c;想成为优秀的程序…

深度学习框架Keras介绍及实战

Keras 是一个用 Python 编写的高级神经网络 API&#xff0c;它能够以 TensorFlow, CNTK, 或者 Theano 作为后端运行。Keras 的开发重点是支持快速的实验。能够以最小的时延把你的想法转换为实验结果&#xff0c;是做好研究的关键。 本文以Kaggle上的项目:IMDB影评情感分析为例,…

操作系统--处理机调度

4 处理机调度 4.1 调度类型 操作系统必须为多个进程的竞争请求分配计算机资源。处理机调度的任务就是选出待分派的作业或进程&#xff0c;为之分配处理机。 为了便于处理机调度管理&#xff0c;通常在处理机调度中采用分级调度方式&#xff0c;其中包括以下3级调度&#xff1a;…

permgen_什么是PermGen泄漏?

permgen接下来是对Java应用程序中特定类型的内存问题的实用介绍。 即–我们将分析导致java.lang.OutOfMemoryError&#xff1a;PermGen空间的错误 堆栈跟踪中的症状。 首先&#xff0c;我们将介绍理解该主题所需的核心概念&#xff0c;并解释什么是对象&#xff0c;类&#…

TP、PHP同域不同子级域名共享Session、单点登录

TP、PHP同域不同子级域名共享Session、单点登录 目的&#xff1a; 为了部署同个域名下不同子级域名共享会话&#xff0c;从而实现单点登录的问题&#xff0c;一处登录&#xff0c;同域处处子系统即可以实现自动登录。 PHP支持通过设置cookie使得同域不同子域共享SESSION 1. 通…

html语言书写注意事项,HTML注意事项(学习笔记)

1、在所有浏览器中都是有效的&#xff0c;但使用 其实是更长远的保障。类似的标签也一样2、标签最好用小写&#xff0c;未来的版本中可能强制用小写3、标签属性始终为属性值加引号属性值应该始终被包括在引号内。双引号是最常用的&#xff0c;不过使用单引号也没有问题。在某些…

UTF-8、GB2312、GB18030、GBK和BIG5等字符集编码范围的具体说明

一预备知识 1&#xff0c;字符&#xff1a;字符是抽象的最小文本单位。 它没有固定的形状&#xff08;可能是一个字形&#xff09;&#xff0c;而且没有值。 “A”是一个字符&#xff0c;“”&#xff08;德国、法国和许多其他欧洲国家通用货币的标志&#xff09;也是一个字…

使用Forge,WildFly Swarm和Arquillian开发微服务

在本文中&#xff0c;我们将看到如何使用WildFly Swarm和Forge开发微服务&#xff0c;以及如何使用Arquillian和Rest Assured对其进行测试。 WildFly Swarm提供了一种创新的方法来打包和运行Java EE应用程序&#xff0c;方法是将它们与足够的服务器运行时一起打包以“ java -j…

html页面加载时触发的方法,在页面加载时触发onchange html事件

好的&#xff0c;我在select字段上有一个onchange事件。它现在很棒。当下拉“网络”更改时&#xff0c;它会刷新第二个下拉列表。我还希望顶部的ajax代码在页面加载和onchange上触发&#xff0c;以便填充第二个列表。这是因为它在编辑页面上。这是使用第一个的ajax调用function…

PYTHON-进阶-编码处理小结

开始 用python处理中文时&#xff0c;读取文件或消息&#xff0c;http参数等等 一运行&#xff0c;发现乱码(字符串处理&#xff0c;读写文件&#xff0c;print) 然后&#xff0c;大多数人的做法是&#xff0c;调用encode/decode进行调试&#xff0c;并没有明确思考为何出现乱码…

华为鸿蒙话题作文800字,关于鸿蒙OS 华为最高层发布最新通知:统一口径-华为,智能手机,鸿蒙...

6月2日晚&#xff0c;华为正式推出了HarmonyOS(鸿蒙操作系统)&#xff0c;引发了国内外空前关注。OS操作系统是中国手机甚至整个科技行业的弱点&#xff0c;因此鸿蒙OS带来的震撼及争议都很多&#xff0c;甚至华为内部员工对它的认知也不相同。为此华为总裁办昨天发布了题为《关…