.net2.0 orm_Java 8:深入研究速度3.0.1“森林”流ORM
.net2.0 orm
沿着这条路
我一直在为开源项目Speedment (它是Stream ORM Java工具包和运行时)做出贡献,并且刚刚发布了一个新的主要版本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
,从一个映射 Carrot
到 Hare
实体。 因此,通过处理返回函数的方法,我们的代码变得非常紧凑。 这也开辟了未来优化流的方法,因为可以在启动流之前在流管道中识别和分析这些功能。 应该注意的是 collect()
和 groupingBy()
方法是标准的Java 8方法。
更好的代码生成
Speedment根据数据库架构数据自动生成代码。 Speedment的一件好事是,我们可以看到,理解和更改生成的代码。 与其他ORM相比,这使事情变得“不可思议”,并将显影剂置于驾驶座上。 新的代码生成功能包括:
支持原始类型
现在我们可以使用原始类型
int
long
或 将列double
,并提高执行速度和内存使用率。 可空字段可以映射到专用字段 Optional
类型,例如 OptionalInt
OptionalLong
和 OptionalDouble
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
.net2.0 orm
.net2.0 orm_Java 8:深入研究速度3.0.1“森林”流ORM相关推荐
- Java 8:对速度3.0.1“森林”流ORM的更深入了解
沿着这条路 我一直在为开源项目Speedment (它是Stream ORM Java Toolkit和Runtime)做出贡献,并且刚刚发布了一个新的主要版本3.0.1" Forest&q ...
- 万向区块链蜂巢学院 | 关于ETH2.0路线图,搞研究的大脑在想什么?
以太坊2.0是2020年区块链行业最火热的话题之一.万向区块链蜂巢学院线上公开课第42期,邀请了以太坊爱好者社区负责人阿剑.链闻研究总监潘致雄.MYKEY研究部门负责人姚翔.HashKey Capit ...
- 计算机usb接口充电效率差,usb2.0和3.0的区别 从传输速度和充电效率等来区别
在选择电脑主板的时候,一般都会看一下主板的USB接口是2.0还是3.0.很多人都知道3.0应该比2.0要好,那么具体好在哪里,usb2.0和usb3.0的区别有哪些?下面将从传输速度.充电效率和接线接 ...
- PCI-E 5.0标准正式公布!速度再次翻番达32GT/s
PCI-SIG标准组织在今天举行的开发者大会上宣布,已经确定32GT/s为下一代PCI-E 5.0标准架构的传输速度--1GT/s相当于每秒10亿次传输,32GT/s那就是每秒320亿次传输. 目前普 ...
- 解决Win10磁盘活动时间100%,读取速度为0的最终方案
一.问题来源 由于前段时间拆机清灰,又重装了系统,并且将系统换了个大点的硬盘,重装之后,电脑的机械硬盘(西部数据1T硬盘)就跟换了引擎一样,慢的一批,经常假死机,刚开始还能用,会有时候卡一下,后来就愈 ...
- 解决.NET 4.0下无法直接运行.NET 2.0程序的问题
如果你在使用vs2010的.net4.0运行不了.net2.0项目的话,可以来看看本文. 由于 .NET 4.0 使用新版本的 CLR,变化也不少, 例如: mscoree.dll 变为 mscore ...
- 前沿资讯|Spring Native 0.11.2、Spring Authorization Server 0.2.2 发布
近日,Spring官方又更新了两个前沿内容,分别是Spring Native 0.11.2 和Spring Authorization Server 0.2.2 .下面一起来看看分别都更新了些什么. ...
- 手动升级oracle,ORACLE 10.2.0.1手动升级到10.2.0.4
ORACLE 10.2.0.1手动升级到10.2.0.4 1.解压zip包以及查看目录权限 p6810189_10204_Linux-x86-64.zip oracle@single-10g:/u01 ...
- 我们这些普通的网民需要知道什么是 WEB2。0吗??【WEB2。0详解 预测模式】
Web 2.0? Web 2.0 正在让互联网逐渐找回Internet的真正含义:平等.交互,去中心化.你不应该只是互联网的读者,你也应该是互联网的作者: 你不该只是在互联网上冲浪,你本身就是波浪制造 ...
最新文章
- HTML5 script 标签的 crossorigin 和integrity属性的作用
- jQuery学习笔记--Helloworld
- 【Android 组件化】使用 Gradle 实现组件化 ( Gradle 变量定义与使用 )
- 联想K系引领智能电视潮流,Android 4.0将成行业标配
- Spring常见面试题(13个面试题,回答超详细)
- (二)为AI时尚分类准备数据
- 标定小觅相机MYNT-EYE-S2110使用kalibr标定
- IT兄弟连 Java语法教程 编写Java源代码
- jquery 新建的元素事件绑定问题
- 前端学习资料汇总(转)
- openstack运维实战系列(一)之keystone用户建立
- 既然Java反射可以访问和修改私有成员变量,那封装成private还有什么意义
- 时速云Kubernetes进阶培训 第三期
- extjs 中时间控件中 时分秒
- 三相电流滞环跟踪PWM控制
- 万字长文:人脸识别综述(学习笔记)
- 李宏毅机器学习—读书笔记
- 3dmax室内灯光强度一般打多少才合适
- model.modules()和model.children()以及model._modules.items()
- 【第一次完成的需求测试流程总结】
热门文章
- P2324 [SCOI2005]骑士精神(迭代加深搜索,dfs)
- [2020.11.3NOIP模拟赛]选数字【容斥】
- P5253-丢番图【数论】
- 【图论】【并查集】矩形(ssl 1222)
- 初一级模拟赛总结(3.15)
- 算法面试,如何在100 亿URL中判断某个URL是否存在
- JavaScript学习总结(九)——Javascript面向(基于)对象编程
- XML解析(一),SAX解析XML
- Java 10的10个新特性,将彻底改变你写代码的方式
- 阿里面试回来,想和 Java 程序员谈一谈