.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 ,从一个映射 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

.net2.0 orm

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

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

相关文章

JavaScript/JS如何给元素对象添加事件

使用普通的 js 代码给元素对象添加事件 绑定事件&#xff0c;添加事件处理程序&#xff1a; var obj document.getElementById("name"); obj.onclick f1; function f1(){ alert("hello!"); }说明&#xff1a;函数名 f1 就是一个引用数据类型的变量&…

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

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

zynq+linux固化程序,如何在 Zynq UltraScale+ MPSoC 上实现 Linux UIO 设计

原标题&#xff1a;如何在 Zynq UltraScale MPSoC 上实现 Linux UIO 设计简介作者&#xff1a; Alex He (何晔)&#xff0c; 赛灵思高级嵌入式应用工程师这里的 UIO 即 Userspace I/O&#xff0c;本文中 UIO 泛指 UIO 设备和 UIO 驱动。它在 Linux kernel 的世界里比较小众&…

python初学者代码示例_Selenium 快速入门笔记和代码示例(Python版)

链接 文档链接&#xff1a; 安装 selenium 模块和 Chrome 浏览器驱动 步骤&#xff1a; 安装 Selenium 模块&#xff1a; pip install selenium 下载浏览器驱动&#xff08;下载即可&#xff0c;无需安装&#xff0c;使用时要指定它的路径&#xff09;&#xff1a;请参考 https…

用例描述

用例名称&#xff1a;简要说明/描述&#xff0c; 优先级&#xff1a; 参与者&#xff1a; 事件流&#xff1a;就是用例执行时&#xff0c;由一序列活动组成的控制流。 基本事件流&#xff1a;对用例中常规、预期路径的描述。 扩展事件流&#xff1a;主要是对一些异常情况、选…

thinkpad笔记本散热风扇_极致的散热体验,ORICO 全铝DIY双风扇笔记本散热垫评测...

电脑的出现&#xff0c;极大的改变了人类的生活。娱乐、办公、游戏、电子竞技等等都需要用到电脑。而电脑也慢慢的在升级着。电脑的体积也由最开始的的占据几间屋子的庞大体积&#xff0c;到后来的台式机、台式一体机、电脑的体积慢慢的变的越来越小。而便携式笔记本电脑的出现…

清除java_如何在Java地毯下有效地清除问题

清除java因为软件错误可能使我们在开发人员面前看起来很糟糕&#xff0c;并导致其他人对我们的想法减少&#xff0c;所以最好避免编写错误&#xff0c;快速识别和修复错误或掩盖我们的错误。 有许多博客文章和文章讨论如何避免错误以及如何识别和修复错误&#xff0c;因此&…

Web产品的交互说明文档应该怎么写?

经常与开发同学聊天&#xff0c;他们说有一个详细的说明文档可以帮助他们更准确的进行工时评估&#xff0c;还可以帮助他们提高工作效率&#xff0c;减少多余的思考时间。因此在这里分享一些制作交互说明文档的经验。 我先说说说交互原型包含哪些部分&#xff1f; 版本说明及更…

linux类似360软件,linux下有什么类似鲁大师查看电脑配置的软

满意答案drqyna2017.05.26采纳率&#xff1a;40% 等级&#xff1a;11已帮助&#xff1a;5455人linux如何查看系统的硬件配置如何在linux系统下查看系统配置&#xff1f;在图形模式下我们可以很方便的利用Linux的图形工具&#xff0c;点击几下就可以查看到Linux系统的的硬件信…

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

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

thinkphp json_原创干货 | Thinkphp序列化合总

听说转发文章会给你带来好运最近Thinkphp几个版本都出了反序列化利用链&#xff0c;这里集结在一起&#xff0c;下面是复现文章&#xff0c;poc会放在最后01Thinkphp5.1.37环境搭建composercreate-project topthink/think5.1.37 v5.1.37poc演示截图调用链单步调试漏洞起点在\th…

linux安java,Linux安装Java

从人类社会的角度看OO&lpar;独家视角&rpar;引言 在OO的工作中,我们一定会涉及到类,抽象类和接口.那么类和抽象类以及接口到底扮演的什么角色? 本文主要是从人类社会的角度阐述类与抽象类以及接口的"社会"关系,从而让我们抛弃书 ...include与require的区别&a…

前端和后端的区别

后端工程师负责服务器端应用程序的编写开发&#xff08;业务逻辑、方法、函数、数据库代码等&#xff09; 前端工程师负责UI的html代码编写和设计&#xff0c;所以前端工程师一般指网页工程师 前端部分是和用户直接交互的&#xff0c;包括前台和后台部分 客户端其实就是属于前端…

笔记本能安装联想智能云教室吗_挑战Jupyter Notebook:云协作、云硬件,上云的Notebook编程环境...

对全世界的 Python 高手而言&#xff0c;Jupyter Notebook 是目前最流行的编程环境&#xff0c;但它也有一些令人难以忍受的缺点。为此&#xff0c;一个位于旧金山的小团队开发了一款名为 Deepnote 的笔记本工具&#xff0c;这是一种云协作、云硬件&#xff0c;上云的 Notebook…

java自动生成类_自动生成优化的Java类专业知识

java自动生成类如果您今年访问过JavaOne&#xff0c;您可能已经参加了我的演讲“如何从数据库生成定制的Java 8代码”。 在那次演讲中&#xff0c;我展示了如何使用Speedment Open Source工具包使用数据库作为域模型来生成各种Java代码。 我们没有时间要考虑的一件事是&#xf…

在Linux中su和sudo区别,Linux中su和sudo的用法和区别

目录sudosudo&#xff1a;暂时切换到超级用户模式以执行超级用户权限&#xff0c;提示输入密码时该密码为当前用户的密码&#xff0c;而不是超级账户的密码。缺点是每次执行超级用户权限都要在命令前加上 sudo &#xff0c;优点是在当前终端再使用 sudo 不要再重复输入密码(只对…

neo4j 添加属性_Neo4j:动态添加属性/设置动态属性

neo4j 添加属性我一直在研究一个具有英国国家铁路时刻表的数据集&#xff0c;它们以文本格式为您提供每列火车的出发和到达时间。 例如&#xff0c;可以这样创建代表停止的节点&#xff1a; CREATE (stop:Stop {arrival: "0802", departure: "0803H"})该…

python 提升效率_@Python 程序员,如何最大化提升编码效率?

作者 | Enoch CK 译者 | 刘畅 整理 | Jane 出品 | Python大本营 【导语】无论你是一位高级的AI工程师还是学生&#xff0c;你都会在工作或学习过程中需要用到 Python。自 1991 年首次发布后&#xff0c;Python 很快就成为了程序员和技术人员最喜欢的语言。作为一种拥有相对简单…

linux tar -xvf命令,linux下tar命令详解

2011-11-28 13:03朋友你好&#xff01;我刚开始搞linux&#xff0c;碰到了很多问题&#xff0c;想问你下&#xff0c;希望能帮我解答下。下面是我的一段shell 程序#&#xff01;/bin/shwhile [ 0 ]doread scoreif [ $score -lt 60 ];thenecho " you must work hard!"…

linux下如何查看主机是否安装了ftp server

常用的发行版的软件包管理系统有Debian系&#xff08;包括Debian&#xff0c;Ubuntu&#xff0c;Mint等&#xff09;和Red Hat系&#xff08;包括RHEL&#xff0c;Fedora&#xff0c;CentOs&#xff0c;Scientific&#xff09;&#xff0c;前者查看是否安装了ftp的命令是&#…