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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

java crud_Java 8流中的数据库CRUD操作

發布時間:2023/12/3 java 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java crud_Java 8流中的数据库CRUD操作 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

java crud

在開始使用新工具時要克服的最大障礙是讓您著手處理小事情。 到目前為止,您可能對新的Java 8 Stream API的工作方式充滿信心,但是您可能尚未將其用于數據庫查詢。 為了幫助您開始使用Stream API創建,修改和讀取SQL數據庫,我整理了此快速入門。 希望它可以幫助您將信息流提升到一個新的水平!

背景

Speedment是一個開源工具包 ,可用于生成Java實體和管理器以與數據庫進行通信。 使用圖形工具,您可以連接到數據庫并生成一個完整的ORM,量身定制以代表您的域模型。 但是Speedment不僅是代碼生成器,而且是插入到您的應用程序中的運行時,并可以將Java 8流轉換為優化SQL查詢。 這是本文中我將重點討論的部分。

產生程式碼

要開始在Maven項目中使用Speedment,請將以下行添加到pom.xml文件中。 在此示例中,我使用的是MySQL,但您也可以使用PostgreSQL或MariaDB。 企業客戶可以使用Oracle等專有數據庫的連接器。

pom.xml

<properties><speedment.version>3.0.1</speedment.version><db.groupId>mysql</db.groupId><db.artifactId>mysql-connector-java</db.artifactId><db.version>5.1.39</db.version> </properties><dependencies><dependency><groupId>com.speedment</groupId><artifactId>runtime</artifactId><version>${speedment.version}</version><type>pom</type></dependency><dependency><groupId>${db.groupId}</groupId><artifactId>${db.artifactId}</artifactId><version>${db.version}</version></dependency> </dependencies><build><plugins><plugin><groupId>com.speedment</groupId><artifactId>speedment-maven-plugin</artifactId><version>${speedment.version}</version><dependencies><dependency><groupId>${db.groupId}</groupId><artifactId>${db.artifactId}</artifactId><version>${db.version}</version></dependency></dependencies></plugin></plugins> </build>

現在,您可以訪問許多新的Maven目標,這些目標使使用工具包變得更加容易。 啟動Speedment UI,執行:

mvn speedment:tool

這將指導您完成連接數據庫的過程并配置代碼生成。 一開始最簡單的方法就是您與默認設置一起運行。 單擊“生成”后,Speedment將分析您的數據庫元數據,并用諸如實體和經理類之類的新資源填充您的項目。

初始化速度

生成域模型后,輕松設置Speedment。 創建一個新的Main.java文件并添加以下行。 您看到的所有類都是生成的,因此它們的名稱將取決于數據庫模式,表和列的名稱。

Main.java

public class Main {public static void main(String... param) {final HaresApplication app = new HaresApplicationBuilder().withPassword("password").build();} }

上面的代碼使用生成的生成器模式創建一個新的應用程序實例。 使用該構建器可以設置任何運行時配置詳細信息,例如數據庫密碼。

有了應用程序實例后,就可以使用它來訪問生成的管理器。 在這種情況下,數據庫中有四個表。 “野兔”,“胡蘿卜”,“人”和“朋友”。 (您可以在此處查看整個數據庫定義 )。

final CarrotManager carrots = app.getOrThrow(CarrotManager.class); final HareManager hares = app.getOrThrow(HareManager.class); final HumanManager humans = app.getOrThrow(HumanManager.class); final FriendManager hares = app.getOrThrow(FriendManager.class);

這些經理現在可以用來執行我們的所有CRUD操作。

創建實體

創建實體非常簡單。 我們使用生成的實體實現,為列設置所需的值,然后將其持久化到數據源。

hares.persist(new HareImpl().setName("Harry").setColor("Gray").setAge(8) );

persist方法返回(可能)新的Hare實例,其中已設置了自動生成的鍵(例如“ id”)。 如果我們要在持久化Harry后再使用Harry,則應使用persist返回的實例。

final Hare harry = hares.persist(new HareImpl().setName("Harry").setColor("Gray").setAge(8) );

如果持久性失敗,例如外鍵或唯一約束失敗,則拋出SpeedmentException。 如果有什么阻止我們堅持野兔,我們應該檢查并顯示錯誤。

try {final Hare harry = hares.persist(new HareImpl().setName("Harry").setColor("Gray").setAge(8)); } catch (final SpeedmentException ex) {System.err.println(ex.getMessage());return; }

讀取實體

Speedment運行時中最酷的功能是能夠使用Java 8 Streams流化數據庫中的數據。 “為什么這么酷?” 你可能會問自己。 “如今,即使Hibernate也支持流 !”

Speedment流的美麗之處在于,在構造流時,它們會考慮中介和終止操作。 這意味著,如果在創建流后將過濾器添加到流中,則在構建SQL語句時仍將其考慮在內。

這是一個例子。 我們要計算數據庫中的野兔總數。

final long haresTotal = hares.stream().count(); System.out.format("There are %d hares in total.%n", haresTotal);

將生成SQL查詢如下:

SELECT COUNT(*) FROM hares.hare;

終止操作是一個.count(),因此Speedment知道它是要創建的SELECT COUNT(…)語句。 還知道“ hare”表的主鍵是“ id”列,這使得將發送給數據庫的整個語句縮減到此范圍內成為可能。

一個更復雜的示例可能是查找名稱以字母“ rry”結尾且年齡大于或等于5的野兔數量??梢赃@樣寫:

final long complexTotal = hares.stream().filter(Hare.NAME.endsWith("rry")).filter(Hare.AGE.greaterOrEqual(5)).count();

我們使用Speedment生成的謂詞構建器來定義過濾器。 這使我們能夠以編程方式分析流并將其簡化為以下SQL語句:

SELECT COUNT(id) FROM hares.hare WHERE hare.name LIKE CONCAT("%", ?) AND hare.age >= 5;

如果我們向流添加無法優化Speedment的操作,它將像任何Java 8流一樣被解析。 我們絕不僅限于使用生成的謂詞構建器,它只是使流更有效。

final long inefficientTotal = hares.stream().filter(h -> h.getName().hashCode() == 52).count();

這將產生以下效率極低的語句,但仍然可以使用。

SELECT id,name,color,age FROM hares.hare;

更新實體

更新現有實體的方式與讀取和保留實體的方式非常相似。 在我們在管理器中調用update()方法之前,對實體的本地副本所做的更改不會影響數據庫。

在這種情況下,我們采用了哈利先前創建的野兔,并希望將其顏色更改為棕色:

harry.setColor("brown"); final Hare updatedHarry = hares.update(harry);

如果更新被接受,管理器將返回新的野兔副本,因此在此之后我們應該繼續使用該實例。 就像在“創建”示例中一樣,更新可能會失敗。 也許將顏色定義為“唯一”列,并且已經存在“棕色”兔子。 在這種情況下,將拋出SpeedmentException。

我們還可以通過將其與流組合來同時更新多個實體。 假設我們要將所有名為“哈利”的野兔都變成棕色。 在這種情況下,我們這樣做:

hares.stream().filter(Hare.NAME.equal("Harry")).map(Hare.COLOR.setTo("Brown")).forEach(hares.updater()); // Updates remaining elements in the Stream

我們還應該將其包裝在try-catch中,以確保在約束失敗時向用戶發出警告。

try {hares.stream().filter(Hare.NAME.equal("Harry")).map(Hare.COLOR.setTo("Brown")).forEach(hares.updater()); } catch (final SpeedmentException ex) {System.err.println(ex.getMessage());return; }

移除實體

我們需要知道的最后一個CRUD操作是如何從數據庫中刪除實體。 這幾乎與“更新”相同。 假設我們要刪除所有10年以上的野兔。 然后,我們這樣做:

try {hares.stream().filter(Hare.AGE.greaterThan(10)).forEach(hares.remover()); // Removes remaining hares } catch (final SpeedmentException ex) {System.err.println(ex.getMessage());return; }

摘要

在本文中,您學習了如何在Maven項目中設置Speedment,以及如何使用Java 8 Streams從數據庫創建,更新,讀取和刪除實體。 這只是Speedment可以做的所有事情的一小部分,但它是開始弄臟雙手的很好的介紹。 可以在GitHub-page上找到更多示例和更高級的用例。

直到下一次!

翻譯自: https://www.javacodegeeks.com/2016/10/database-crud-operations-java-8-streams.html

java crud

總結

以上是生活随笔為你收集整理的java crud_Java 8流中的数据库CRUD操作的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。