日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > java >内容正文

java

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

發(fā)布時間:2023/12/3 java 67 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java 8:对速度3.0.1“森林”流ORM的更深入了解 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

沿著這條路

我一直在為開源項(xiàng)目Speedment (它是Stream ORM Java Toolkit和Runtime)做出貢獻(xiàn),并且剛剛發(fā)布了一個新的主要版本3.0.1“ Forest”。 版本的發(fā)布以加利福尼亞州帕洛阿爾托的大街小巷命名,大多數(shù)貢獻(xiàn)者都在這里工作。 沿Middlefield Road向南行駛,每個新的主要發(fā)行版本都獲得了新的名稱。 新版本現(xiàn)已模塊化,可幫助開發(fā)人員保持良好的步伐。 Speedment用戶還擁有大量新功能,在本文中,我們將探討一些發(fā)現(xiàn)的東西!

堅(jiān)持不懈

現(xiàn)在,習(xí)慣于較早的ORM的人們可以在從數(shù)據(jù)庫創(chuàng)建,更新或刪除實(shí)體時以相同的方式使用Speedment。 例如,我們可以在數(shù)據(jù)庫“ JPA樣式”中創(chuàng)建實(shí)體,如下所示:

Hare hare = new HareImpl(); hare.setName("Flopsy"); hare.setAge(1); hare.setColor("Gray");entityManager.persist(hare); // Persists (=inserts) the new Hare in the database

雖然這不是什么大變化,但仍然很方便。

聲明式流組成

速度數(shù)據(jù)庫查詢表示為對標(biāo)準(zhǔn)Java 8流的操作。 在新版本中,Speedment API提供了返回函數(shù)而不是直接對對象進(jìn)行操作的方法。 這簡化了稱為“聲明性流組合”的操作,這僅意味著編寫流變得更加容易和高效。

讓我們仔細(xì)看一個示例,在該示例中,我們希望聯(lián)接來自兩個不同表的對象。 我們有兩個表“ hare”和“ carrot”,其中“ carrot”具有一個名為“ owner”的字段,該字段是“ hare”。“ id”列的外鍵。 任務(wù)是構(gòu)建一個包含所有Hare實(shí)體作為鍵的Map,并通過其外鍵將屬于特定Hare的Carrot實(shí)體列表作為值。 可以這樣表示:

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


goupingBy()方法需要一個
Function ,從一個映射 Carrot到 Hare實(shí)體。 因此,通過處理返回函數(shù)的方法,我們的代碼變得非常緊湊。 這也開辟了未來優(yōu)化流的方法,因?yàn)榭梢栽趩恿髦霸诹鞴艿乐凶R別和分析這些功能。 應(yīng)該注意的是 collect()和 groupingBy()方法是標(biāo)準(zhǔn)的Java 8方法。

更好的代碼生成

Speedment根據(jù)數(shù)據(jù)庫架構(gòu)數(shù)據(jù)自動生成代碼。 Speedment的一件好事是,我們可以看到,理解和更改生成的代碼。 與其他ORM相比,這使事情變得“不可思議”,并將顯影劑置于駕駛座上。 新的代碼生成功能包括:

支持原始類型

現(xiàn)在我們可以使用原始類型
int
long或 將列double ,并提高執(zhí)行速度和內(nèi)存使用率。 可空字段可以映射到專用字段 Optional類型,例如 OptionalInt OptionalLong和 OptionalDouble Double與Java 8代碼樣式一致。

模塊化代碼生成

我們可以插入自己的代碼生成邏輯并改編默認(rèn)代碼生成器。 這對于可能更深入地了解我們的領(lǐng)域模型并希望利用該知識的開發(fā)人員來說非常方便。 通過自定義代碼生成器添加新功能時,這些新功能將立即應(yīng)用于所有生成的代碼。 對代碼進(jìn)行編碼并獲得利用!

兼容模式

一些較舊的解決方案不準(zhǔn)備用于
Optional字段,因此添加了新的“兼容性”模式,例如,將返回一個可為空的整數(shù)作為
Integer而不是 OptionalInt 。

可配置名稱空間

現(xiàn)在,我們可以配置代碼生成器,以將實(shí)體,管理器和配置對象分別放置在任何名稱空間上。 這對模塊化項(xiàng)目很有用。

改進(jìn)的代碼渲染器

Speedment使用模型視圖控制器(MVC)范例進(jìn)行代碼生成。 這意味著代碼模型(是抽象語法樹)與實(shí)際的代碼呈現(xiàn)(視圖)是分開的。 視圖已經(jīng)更新和改進(jìn),因此它可以生成更好的代碼。

校驗(yàn)和保護(hù)

手動更改類受校驗(yàn)和保護(hù),以便即使我們決定更改名稱空間,也可以保留它們。

類型安全性提高

現(xiàn)在,Speedment可以將采用小字符串集的值的列映射到Enums,從而進(jìn)一步提高類型安全性。 當(dāng)生成的代碼使用Enum時,編譯器將盡早發(fā)現(xiàn)數(shù)據(jù)庫模型與業(yè)務(wù)邏輯中使用的值之間的任何不匹配,而不是在開發(fā)周期的后期發(fā)現(xiàn)。

改進(jìn)日志記錄以提高透明度

Speedment有一個新的日志記錄系統(tǒng),使我們可以查看發(fā)送到數(shù)據(jù)庫的確切SQL代碼。 這有利于提高透明度,并使我們能夠準(zhǔn)確地了解引擎蓋下的情況。 我們可以輕松地啟用所有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");

這將產(chǎn)生以下日志:

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

改進(jìn)的用戶界面

圖形工具已在許多方面得到改進(jìn)。 現(xiàn)在,我們得到警告和提示,可以為我們提供更好的指導(dǎo)。 添加了幾個代碼生成器配置選項(xiàng),當(dāng)我們選擇不同的配置對象時,我們還會看到更多相關(guān)信息。

新的Maven目標(biāo)

有兩個新的Maven目標(biāo); “清除”和“重新加載”,可用于自動化和簡化構(gòu)建過程。 目標(biāo)“清除”將刪除所有生成的代碼(未手動更改),并且“重新加載”直接從現(xiàn)有數(shù)據(jù)庫(元數(shù)據(jù))重新加載域模型。

旋轉(zhuǎn)一下

在GitHub上查看開放源代碼Speedment,那里還有Wiki和快速入門指南 。 隨時提供反饋,并通過Gitter參加討論。

安全駕駛!

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

總結(jié)

以上是生活随笔為你收集整理的Java 8:对速度3.0.1“森林”流ORM的更深入了解的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。