精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

Java 8 Streams中的數據庫CRUD操作

開發 后端
接觸一個新工具的時候,剛開始要克服的最大障礙就是如何讓你自己先嘗試做出一個小東西來。現在你也許對 Java 8 中新的 Stream API 的運作方式在理解上比較自信,但你也許并沒用它來進行過數據庫查詢操作。為了幫助你開始使用 Stream API 來對 SQL 數據庫進行創建、修改和讀取操作, 我已經在這個快速開始的教程中把它們整合到了一起。希望它能幫助你提升對流式API的使用水平!

[[175252]]

接觸一個新工具的時候,剛開始要克服的***障礙就是如何讓你自己先嘗試做出一個小東西來。現在你也許對 Java 8 中新的 Stream API 的運作方式在理解上比較自信,但你也許并沒用它來進行過數據庫查詢操作。為了幫助你開始使用 Stream API 來對 SQL 數據庫進行創建、修改和讀取操作, 我已經在這個快速開始的教程中把它們整合到了一起。希望它能幫助你提升對流式API的使用水平!

背景

Speedment 是一個開放源代碼的工具集,它可以被用來生成 Java 實體,并且能將我們同數據庫的通信過程管理起來。你可以利用一個圖形工具連接到數據庫并生成出一套完整的 ORM 框架代碼來表示域模型。但是 Speedment 不單單只是一個代碼生成器而已,它還是一個能插入應用程序中的運行時程序,這樣就有可能將你的 Java 8 流式代碼翻譯成優化過的SQL查詢。這也是我將會在本文中專門講述的一個部分。

生成代碼

要在一個 Maven 工程中開始使用 Speedment,需要你將下面幾行代碼添加到你的 pom.xml 文件中。在本例中,我使用的是 MySQL,而你也可以選擇使用 PostgreSQL 或者 MariaDB。面向于像Oracle這樣的專有數據庫可用于企業級客戶。

Pom.xml

 

  1. <properties> 
  2.   <speedment.version>3.0.1</speedment.version> 
  3.   <db.groupId>mysql</db.groupId> 
  4.   <db.artifactId>mysql-connector-java</db.artifactId> 
  5.   <db.version>5.1.39</db.version> 
  6. </properties>  
  7. <dependencies> 
  8.   <dependency> 
  9.     <groupId>com.speedment</groupId> 
  10.     <artifactId>runtime</artifactId> 
  11.     <version>${speedment.version}</version> 
  12.     <type>pom</type> 
  13.   </dependency>  
  14.   <dependency> 
  15.     <groupId>${db.groupId}</groupId> 
  16.     <artifactId>${db.artifactId}</artifactId> 
  17.     <version>${db.version}</version> 
  18.   </dependency> 
  19. </dependencies>  
  20. <build> 
  21.   <plugins> 
  22.     <plugin> 
  23.       <groupId>com.speedment</groupId> 
  24.       <artifactId>speedment-maven-plugin</artifactId> 
  25.       <version>${speedment.version}</version>  
  26.       <dependencies> 
  27.         <dependency> 
  28.           <groupId>${db.groupId}</groupId> 
  29.           <artifactId>${db.artifactId}</artifactId> 
  30.           <version>${db.version}</version> 
  31.         </dependency> 
  32.       </dependencies> 
  33.     </plugin> 
  34.   </plugins> 
  35. </build> 

現在你可以訪問到許多新的 Maven 資源庫,它們能讓你更加輕松的使用這個工具包。要啟動 Speedment UI, 執行如下命令:

  1. mvn speedment:tool 

這樣就會有一個過程引導你連接到數據庫并對代碼生成進行配置。一開始最簡單的方法就是用默認的設置先跑起來再說。當你按下生成按鈕“Generate,” Speedment 就會對你的數據庫元數據進行分析,然后在你的工程中添加像實體和實體管理器這樣的類。

初始化 Speedment

當你的域模型生成好了以后,Speedment 的設置就容易了。創建一個新的 Main.java 文件然后添加如下幾行代碼。你看到的類都是生成的,因此它們的命名都是根據數據庫模式、表以及列的名稱來決定的。

 

Main.java  

  1. public class Main {  
  2. public static void main(String... param) {  
  3. final HaresApplication app = new HaresApplicationBuilder()  
  4. .withPassword("password" 
  5. .build();  
  6.  

上面的代碼創建了一個新的應用程序實體,它使用了一種生成的構造器模式。構造器是的對任何運行時配置細節的設置成為可能,例如數據庫的密碼。

當我們有了一個應用實體,就可以用它來訪問生成的實體管理器了。在這里,我的數據庫中有了四個表; “hare”, “carrot”, “human”, 以及 “friend”. (你可以在這里找到完整的數據庫定義)。

 

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

現在這些實體管理器可以被用來執行所有的CRUD操作了。

創建實體

創建實體的方式非常直接。我們就使用實體生成的實現,把列的值設置好然后持久化到數據源就可以了。

 

  1. hares.persist(  
  2. new HareImpl()  
  3. .setName("Harry" 
  4. .setColor("Gray" 
  5. .setAge(8) 
  6.  ); 

persist 方法會返回一個 (潛在的) Hare 新實例,里面像“id”這種自動生成鍵已經設置好了。如果我們想在持久化之后繼續使用 Harry, 那就可以使用 persist 方法返回的這個:

 

  1. final Hare harry = hares.persist(  
  2. new HareImpl()  
  3. .setName("Harry" 
  4. .setColor("Gray" 
  5. .setAge(8)  
  6. ); 

如果持久化操作失敗了,例如如果有一個外鍵違反了唯一性約束,就會有一個 SpeedmentException 拋出。我們應該對此進行檢查,如果有默寫東西會阻止我們對這條 hare 記錄進行持久化,就應該顯示一條錯誤信息。

 

  1. try {  
  2. final Hare harry = hares.persist(  
  3. new HareImpl()  
  4. .setName("Harry" 
  5. .setColor("Gray" 
  6. .setAge(8)  
  7. );  
  8. } catch (final SpeedmentException ex) {  
  9. System.err.println(ex.getMessage());  
  10. return 

讀取實體

Speedment 運行時中最酷的功能特性就是能夠使用 Java 8 的 Stream API對數據庫中的數據進行流式操作。“為什么這樣做會很酷呢?” 你可能會這樣問你自己。“如今甚至Hibernate 都已經支持流式操作了!”這就是回答。

使用 Speedment 流式操作最美好的事情就是它們把構建流的中間和終止動作都考慮進去了。這就意味著如果你在流已經被創建之后添加一個過濾器進去,那么在構建 SQL 語句時這個過濾器也會被考慮進去。

下面是一個示例,我們想要計算數據庫中 hare 記錄的總數。

 

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

這段代碼將會生成的SQL查詢如下:

  1. SELECT COUNT(id) FROM hares.hare; 

這里的終止操作就是 .count() ,因此 Speedment 就知道是要創建一個 SELECT COUNT(…) 語句。它也知道 “hare”表的主鍵是“id”這個列,如此就有可能將發送給數據庫的整個語句 減少到這個樣子。

更加復雜的示例可能就是找出名稱以 “rry” 并且年齡大于等于 5 的兔子的數量。這個可以這樣寫:

 

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

我們使用由 Speedment 為我們生成的位于構建器來定義過濾器。這使得我們以編程的方式對流進行分析并且將其簡化到如下這樣一條SQL語句成為可能:

 

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

如果我們添加了一個 Speedment 不可以對流進行優化的操作, 它就會像一般的 Java 8 流那被處理。我們永遠都不會限制生成的位于構建器的使用,它能是流式操作更加的高效。

 

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

上述代碼會產生一條如下極其低效的語句,但是它仍然可以跑起來。

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

更新實體

更新存在的實體和讀取以及持久化實體非常相似。在我們調用update()方法之前,對實體本地拷貝的改變,不會影響數據庫內容。

下面,我們拿到之前使用Hare創建的Harry,并將他的顏色變為棕色:

 

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

如果更新被接受了,那么管理器會返回hare的一個新的拷貝,因為我們在后面會繼續使用這個實例。就想做“創建”的例子中,更新可能會失敗。也許顏色被定義為“值唯一”,棕色已經存在于hare中。那樣的話,會拋出一個SpeedmentException異常.

我們也可以通過合并多個實體到一個流中來同時更新他們。加入我們想將所有名字為Harry的hare變為棕色,我們可以這樣做:

 

  1. hares.stream()  
  2. .filter(Hare.NAME.equal("Harry")) 
  3. .map(Hare.COLOR.setTo("Brown"))  
  4. .forEach(hares.updater()); // 更新流中存在的元素 

我們還應該使用try-catch語句來確保在運行過程中有失敗發生時警告用戶。

 

  1. try {  
  2. hares.stream()  
  3. .filter(Hare.NAME.equal("Harry"))  
  4. .map(Hare.COLOR.setTo("Brown"))  
  5. .forEach(hares.updater());  
  6. } catch (final SpeedmentException ex) {  
  7. System.err.println(ex.getMessage());  
  8. return
  9.  

實體刪除

我們需要知道的***一個 CRUD 操作就是從數據庫中刪除實體。這個操作幾乎和“更新”操作時等同的。假如說我們要把年齡超過10歲的兔子的記錄都刪除,就要這樣做:

 

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

總結

通過閱讀本文你已經了解了如何在一個 Maven 工程中對 Speedment 進行設置,還有如何使用 Java 8 的 Stream API 來從數據庫中創建、更新、讀取以及刪除實體。這是你可以利用 Speedment 所能進行的操作的一個小的子集, 但已經是一個能讓你上手的好的開始了。更多的示例以及更加高級的使用場景可以在GitHub-page上找到。

責任編輯:未麗燕 來源: 碼農網
相關推薦

2024-12-23 13:31:38

2010-05-05 15:45:52

Oracle數據庫

2010-08-31 16:53:54

DHCP數據庫

2011-08-30 14:25:06

QT數據庫

2010-03-31 19:34:03

Oracle數據庫

2014-11-11 15:25:30

PHPWeb

2010-05-25 09:47:05

2011-07-05 10:27:06

MySQL數據庫檢索排序

2010-09-27 14:54:38

SQL數據庫

2010-05-31 17:18:39

Cassandra數據

2010-05-28 14:51:47

MySQL數據庫

2025-02-10 00:00:00

技巧JavaStreams

2011-05-13 13:38:49

數據庫對象

2020-11-16 08:56:02

Python

2010-04-30 14:39:03

Oracle數據庫

2018-02-26 20:00:00

編程語言JavaMySQL

2009-07-15 16:23:54

Java JDBC

2023-08-18 09:27:15

Java代碼

2010-05-12 18:02:11

MySQL數據庫

2010-04-30 16:19:08

Oracle數據庫
點贊
收藏

51CTO技術棧公眾號

欧美日韩国产天堂| 国产日韩欧美精品综合| 国内免费久久久久久久久久久| 国产一级二级av| 天堂av中文在线观看| 亚洲国产精品av| 91精品网站| 日韩手机在线视频| 亚洲第一偷拍| 亚洲欧洲午夜一线一品| 久久人人爽人人片| 91看片一区| 亚洲国产日韩a在线播放性色| 人禽交欧美网站免费| av片免费播放| 丝袜美腿亚洲一区二区图片| 欧美大码xxxx| 夫妇交换中文字幕| 国产+成+人+亚洲欧洲在线| 欧美性生交片4| heyzo亚洲| 黄色av电影在线播放| av成人老司机| 91亚色免费| 一级爱爱免费视频| 久久一区国产| 96精品视频在线| 免费在线视频一区二区| 久久美女精品| 国产午夜精品全部视频在线播放| 亚洲香蕉中文网| www.91精品| 欧美日韩国产123区| av免费播放网址| 9lporm自拍视频区在线| 亚洲精品日日夜夜| 在线视频精品一区| av色图一区| 国产亚洲污的网站| 免费看国产精品一二区视频| 六月婷婷综合网| 国产91富婆露脸刺激对白| 国产中文字幕91| 中日精品一色哟哟| 日韩高清不卡在线| 国产成人高清激情视频在线观看| 日本少妇xxxx动漫| 黄色欧美日韩| 久久久久女教师免费一区| 男人与禽猛交狂配| 偷偷www综合久久久久久久| 中文字幕在线视频日韩| 欧美三级视频网站| 欧美日韩黑人| 色青青草原桃花久久综合| 国产精品免费无码| 日韩精品一区二区三区免费观看| 一区二区三区久久精品| 呻吟揉丰满对白91乃国产区| 色偷偷综合网| 成人444kkkk在线观看| 爱爱视频免费在线观看| 综合色一区二区| 欧美黑人狂野猛交老妇| 国产无遮挡又黄又爽又色| 在线观看日韩av电影| 久久久久久91香蕉国产| 日韩黄色一级大片| 日韩激情av在线| 91精品视频免费观看| jlzzjlzzjlzz亚洲人| 成人免费毛片app| 蜜桃狠狠色伊人亚洲综合网站| 嫩草在线播放| 中文字幕一区二区三区蜜月| 黄色污污在线观看| 川上优av中文字幕一区二区| 欧美性猛交丰臀xxxxx网站| 三级视频中文字幕| 玖玖玖视频精品| 日韩大片在线观看视频| 亚洲av成人无码久久精品| 天天色综合色| 性欧美xxxx| 亚洲永久精品一区| 国产一区二区三区在线观看免费| 国产传媒欧美日韩| 岛国在线视频免费看| 亚洲三级在线免费| 免费国产黄色网址| 欧美成a人片免费观看久久五月天| 欧美一区二区高清| 成人免费无遮挡无码黄漫视频| 欧美精品尤物在线观看| 九色精品美女在线| 亚洲av无码不卡| 国产乱码精品一区二区三| 久久av一区二区| 免费观看在线午夜影视| 亚欧色一区w666天堂| 日本xxxx黄色| 日本在线中文字幕一区| 欧美成年人视频网站| 欧美亚洲另类小说| 成人一区二区三区| 国产又爽又黄ai换脸| 深夜av在线| 日韩视频在线永久播放| 97人妻人人揉人人躁人人| 影音先锋在线一区| 国产欧美精品一区二区| 日韩黄色影片| 亚洲尤物视频在线| 亚洲美女性囗交| 国产亚洲第一伦理第一区| 欧美国产视频一区二区| 一级爱爱免费视频| 国产视频一区二区三区在线观看| 欧美日韩不卡在线视频| 国内精品视频| 日韩亚洲成人av在线| 日韩一级在线视频| 99精品久久久久久| 波多野结衣 作品| 亚洲欧美在线人成swag| 亚洲视频国产视频| 青青国产在线观看| 成人av网在线| 人人妻人人澡人人爽欧美一区双| 六九午夜精品视频| 国产亚洲aⅴaaaaaa毛片| 东京热一区二区三区四区| 成人免费毛片aaaaa**| 欧美高清中文字幕| 日韩不卡在线视频| 久久成人精品一区二区三区| 国产一区二区三区成人| 国产精品久久久久久久久久久免费看| 天堂社区在线视频| 精品国产一区二区三区久久久蜜臀| 午夜精品视频网站| 欧美亚洲精品在线观看| 午夜精品一区二区三区免费视频 | 亚洲欧美区自拍先锋| 9l视频白拍9色9l视频| 精品大片一区二区| 国产成人精品久久久| 黄网在线观看| 欧亚洲嫩模精品一区三区| 四虎永久免费在线观看| 日韩av一级片| 亚洲一区二区三区乱码| 四虎国产精品成人免费影视| 啊v视频在线一区二区三区| 一级片视频网站| 亚洲日本电影在线| 性一交一黄一片| 亚洲视频一二| 久久久久久国产精品mv| 午夜无码国产理论在线| 这里只有精品视频| 国产又粗又猛又爽又黄视频| 亚洲精品高清在线| 亚洲免费观看在线| 国产免费成人| 五月天色一区| 国产一区二区三区免费观看在线| 欧美激情一区二区三区在线视频观看| 乱精品一区字幕二区| 一本一道久久a久久精品综合蜜臀| 一级黄色片网址| 国产精品一区二区久久不卡| 男女猛烈激情xx00免费视频| 视频一区欧美| 成人网在线视频| 男女视频在线| 国产视频精品免费播放| 做爰视频毛片视频| 一区二区三区高清| 99久久人妻无码中文字幕系列| 久久亚洲影院| av动漫在线播放| 亚洲人成精品久久久| 91精品国产自产在线| 国产网红在线观看| 中文字幕av一区中文字幕天堂| 99国产精品99| 日韩欧美视频一区二区三区| 麻豆天美蜜桃91| 97精品久久久久中文字幕| 中文字幕第80页| 国产精品vip| 性欧美大战久久久久久久免费观看| 精品国产不卡一区二区| 欧洲成人在线视频| 亚洲精品天堂| 曰本色欧美视频在线| 粉嫩av一区二区夜夜嗨| 欧美日韩免费一区二区三区视频| 国产一级中文字幕| 国产精品美女视频| 四季av综合网站| 国产综合久久久久久鬼色| 国产日韩一区二区在线| 国产精品va| 中文字幕一区二区三区在线乱码| 羞羞答答一区二区| 91亚色免费| 四虎永久精品在线| 国产不卡精品视男人的天堂| xxx.xxx欧美| 久热精品视频在线观看一区| eeuss影院在线播放| 日韩国产欧美精品在线| 精品人妻av一区二区三区| 欧美色精品在线视频| 国产一级片毛片| 婷婷国产v国产偷v亚洲高清| 国产波霸爆乳一区二区| 国产精品网站在线观看| 一级黄色片大全| 97精品超碰一区二区三区| 亚洲天堂小视频| 国产精品综合二区| 911av视频| 久久电影国产免费久久电影| 国产一级不卡毛片| 一本久道久久综合狠狠爱| 少妇大叫太大太粗太爽了a片小说| 欧美gvvideo网站| 视频一区三区| 成人羞羞视频播放网站| 日日夜夜精品网站| 久久99高清| 欧美久久久久久一卡四| 日韩av资源网| 韩日午夜在线资源一区二区| 国产精品白丝av嫩草影院| 国产精品二区在线| 香蕉免费一区二区三区在线观看 | 综合分类小说区另类春色亚洲小说欧美| 黑人巨大精品欧美| 久久影视一区二区| 中国毛片在线观看| 国产色91在线| 好吊视频在线观看| 国产欧美精品区一区二区三区| 91视频免费观看网站| 国产偷国产偷亚洲高清人白洁| 亚洲精品国产91| 国产欧美日韩在线| 夫妇露脸对白88av| 国产精品毛片久久久久久| 国产成人免费在线观看视频| 综合精品久久久| 精品无码m3u8在线观看| 午夜精品一区在线观看| 黄色在线视频网址| 欧美视频在线不卡| av中文字幕免费在线观看| 欧美大片一区二区三区| 六月婷婷综合网| 亚洲欧洲在线视频| 欧洲不卡视频| 久久久久久久一区二区| 两个人看的在线视频www| 国产999在线观看| 9999在线精品视频| 国产精品青青草| 九九在线高清精品视频| 亚洲一区三区在线观看| 欧美在线免费| 黄色免费视频大全| 美女尤物国产一区| 美女露出粉嫩尿囗让男人桶| 久久毛片高清国产| 一区二区三区影视| 午夜精品成人在线视频| 中文字幕二区三区| 日韩精品专区在线影院观看 | 国产视频一区在线观看| 暗呦丨小u女国产精品| 亚洲aaa精品| 伊人网视频在线| 亚洲国产成人一区| 在线免费观看黄色| 午夜精品福利在线观看| 成人免费一区| 国产精品初高中精品久久| 日韩精品网站| 国产精品沙发午睡系列| 国产专区欧美精品| 日韩人妻一区二区三区| 亚洲欧美偷拍卡通变态| 午夜精品一区二| 日韩欧美视频一区| 福利片在线观看| 久久久久久中文字幕| 欧美一级做a| 女同一区二区| 在线观看一区| 在线一区二区不卡| 久久久99免费| 日本三级中文字幕| 日韩一区国产二区欧美三区| 黄色av网站在线看| 国内精品视频在线| 国产精品美女久久久久人| 欧洲精品一区色| 亚洲国产欧美国产综合一区| 性生生活大片免费看视频| 久久久99久久| 成人免费看片98欧美| 日韩一区二区三区在线观看| 成年人免费在线视频| 97碰在线观看| av日韩在线播放| 懂色av粉嫩av蜜臀av| 日本不卡中文字幕| 51调教丨国产调教视频| 亚洲最新在线观看| 国产视频一区二区三| 伊人久久免费视频| 自拍网站在线观看| 精品一区国产| aa国产精品| 久久久久麻豆v国产精华液好用吗| 亚洲色大成网站www久久九九| 亚洲一卡二卡在线观看| 伊人久久免费视频| 欧美free嫩15| 神马影院午夜我不卡影院| 日韩精品视频网| 妺妺窝人体色WWW精品| 色综合天天综合狠狠| 水莓100国产免费av在线播放| 亚州国产精品久久久| 精品福利一区| 激情五月宗合网| 91色在线porny| 天堂在线免费观看视频| 日韩电影大全免费观看2023年上| 成人免费图片免费观看| 国产一区二区三区四区五区在线 | 国产美女精品久久| 日韩欧美精品免费在线| 免费在线毛片| 国产精品99久久久久久人| 精品免费视频| 亚洲污视频在线观看| 亚洲欧洲一区二区在线播放| 国产精品欧美亚洲| 九九久久久久久久久激情| 91精品国产乱码久久久竹菊| 妺妺窝人体色777777| 91美女片黄在线观看91美女| 亚洲乱码国产乱码精品| 中文一区二区视频| 9999在线精品视频| 青青在线免费观看| 97久久精品人人做人人爽50路| 超碰中文字幕在线| 一区二区三区四区在线观看视频| 四虎国产精品免费久久| 国产一级大片免费看| 99免费精品视频| 这里只有精品国产| 久久成人av网站| 青草久久视频| 国产精品一区二区小说| 夜色激情一区二区| 欧美午夜黄色| 成人网欧美在线视频| 亚洲久久成人| 一级黄色片网址| 欧美成人a∨高清免费观看| 色在线免费观看| 一区二区三区视频| 成人一区二区三区中文字幕| av图片在线观看| y97精品国产97久久久久久| 99这里只有精品视频| 成人性视频欧美一区二区三区| 国产精品福利影院| 无码精品人妻一区二区| 国产欧美日韩中文字幕| 亚洲视频中文| 殴美一级黄色片| 日韩成人av在线| 国产一区二区| 亚洲 中文字幕 日韩 无码| 一区二区三区免费在线观看| 久草在线免费福利资源| 96久久精品| 日韩高清一区二区| 国产精品第一页在线观看| 中文字幕精品网| 日韩成人av在线资源| 又黄又爽又色的视频| 欧美在线小视频|