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 ,從一個映射 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
總結
以上是生活随笔為你收集整理的Java 8:对速度3.0.1“森林”流ORM的更深入了解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 投票:苹果 iPhone 15 / Pr
- 下一篇: 华尔街顶尖投行,为什么认定特斯拉Dojo