精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

特级毛片www| 国产人妻人伦精品1国产丝袜| 欧美激情午夜| 国产精品一区二区三区乱码| 久久久久久久久久久网站| 网站免费在线观看| 亚洲毛片在线免费| 红桃视频成人在线观看| 亚洲国产综合自拍| 色综合免费视频| 免费不卡在线视频| 韩国精品久久久999| 亚洲一区 欧美| 精品福利网址导航| 欧美另类一区二区三区| 五十路熟女丰满大屁股| 麻豆电影在线播放| 久久久久久久久岛国免费| 91黄色国产视频| 精品国产乱子伦| 欧美视频在线观看| 日韩视频永久免费观看| 国产精品815.cc红桃| 中文字幕日韩高清在线| 欧美日韩亚洲综合| 国产精品免费观看久久| 国语对白在线刺激| 亚洲婷婷国产精品电影人久久| 精品国产乱码久久久久软件 | 六月丁香婷婷久久| 欧美亚洲另类制服自拍| 国产在线欧美在线| 亚洲人metart人体| 综合国产在线观看| 女人又爽又黄免费女仆| 欧美男男freegayvideosroom| 欧美一级二级三级蜜桃| 亚洲一区精品视频在线观看| 久久野战av| 欧美午夜电影在线| 999在线观看视频| 国产深夜视频在线观看| 亚洲欧美韩国综合色| 亚洲午夜精品久久久久久浪潮| 日韩资源在线| 久久综合九色综合97_久久久| 国产精华一区| 丰满肥臀噗嗤啊x99av| 国产精品一区二区果冻传媒| 91精品中文在线| 一级成人免费视频| 麻豆成人久久精品二区三区小说| 国产成人涩涩涩视频在线观看| 国产高清中文字幕| 久久久久久穴| 国产精品高潮呻吟久久av无限| 久久久精品视频网站| 久久精品免费| 国产精品九九久久久久久久| 伊人成年综合网| 毛片基地黄久久久久久天堂| 91精品久久久久久综合乱菊| 一卡二卡三卡在线| 国产精品香蕉一区二区三区| 国产传媒欧美日韩| 色婷婷中文字幕| 久久综合给合久久狠狠狠97色69| 欧美凹凸一区二区三区视频 | 日韩在线观看一区二区三区| 91精品国产麻豆国产自产在线| 在线播放国产视频| 欧美精品中文字幕亚洲专区| 国产午夜精品久久久| 国产美女永久免费无遮挡| 日本一区二区免费高清| 久久伊人精品一区二区三区| 国产精品成人网站| 麻豆久久精品| 国产精品日韩欧美综合| 国产色视频在线| www.在线成人| 亚洲精品国产精品久久| 神马午夜伦理不卡| 日韩人体视频一二区| 性chinese极品按摩| 精品国产一区二区三区2021| 亚洲国产天堂网精品网站| 精品人伦一区二区三电影| 91久久国产| 性欧美办公室18xxxxhd| 中文字幕男人天堂| 成人午夜电影小说| 神马影院午夜我不卡影院| 国产美女av在线| 色综合天天性综合| 制服下的诱惑暮生| 国产探花在线精品一区二区| 美女999久久久精品视频| 精品国产xxx| 国产酒店精品激情| 日本一区二区三区视频在线播放| 在线中文字幕-区二区三区四区| 一本色道a无线码一区v| 一级 黄 色 片一| 精品在线手机视频| 欧美高清视频免费观看| 中文字幕乱码人妻无码久久| 成人av网站在线观看免费| 无遮挡亚洲一区| 麻豆免费版在线观看| 69久久99精品久久久久婷婷 | av中文字幕播放| 久久只精品国产| 日韩精品免费一区| 福利一区二区三区视频在线观看| 亚洲精品成人网| 欧美成人一二三区| 蜜臀精品一区二区三区在线观看 | heyzo在线播放| 91精品国产综合久久久久久久久久| 中文字幕 亚洲一区| 午夜国产精品视频免费体验区| 国产精品久久久久久亚洲影视| 黄色av一区二区三区| 亚洲欧洲综合另类| gai在线观看免费高清| 国内精品伊人久久久| 欧美亚洲免费电影| 日韩在线视频第一页| 一区二区三区在线观看国产| 想看黄色一级片| 国产精品成人一区二区不卡| 国产精品美乳一区二区免费| 麻豆导航在线观看| 日韩欧美国产免费播放| 中文字幕av观看| 日韩午夜高潮| 精品一区二区三区免费毛片| 国产无遮挡裸体视频在线观看| 日韩精品资源二区在线| 精品国产欧美日韩不卡在线观看| 久久国产精品免费| 一区二区三区四区五区精品 | 在线播放国产精品二区一二区四区| 国产高清一区二区三区四区| 久久都是精品| 欧美三日本三级少妇三99| 成人私拍视频| 国产亚洲人成网站在线观看| 日日夜夜狠狠操| 国产欧美日韩不卡| 亚洲色图 在线视频| 久久激情电影| 91精品久久久久久久久久久| 免费黄色在线看| 在线成人av网站| 人妻少妇精品一区二区三区| 国产黄色91视频| 亚洲中文字幕无码av永久| 大香伊人久久精品一区二区| 97视频在线观看免费| 人人九九精品| 欧美制服丝袜第一页| 国产中文字幕久久| 国产精品影视天天线| 国产一线二线三线女| 中文字幕亚洲影视| 国产欧美最新羞羞视频在线观看| 黄页视频在线播放| 亚洲国产精品高清久久久| 国产成人一级片| 国产精品视频免费| 初高中福利视频网站| 91久久亚洲| 视频在线观看成人| 亚洲一区二区三区免费| 69国产精品成人在线播放| 国产黄色在线| 日韩一区二区免费视频| 久久99国产综合精品免费| 国产精品电影一区二区三区| 一级黄色大片免费看| 米奇777在线欧美播放| 致1999电视剧免费观看策驰影院| 99re热精品视频| 国产精品高潮呻吟视频| 日本欧美电影在线观看| 亚洲人成电影网站色…| 国产女无套免费视频| 欧美视频一区二区三区…| 婷婷国产成人精品视频| 9l国产精品久久久久麻豆| 日本在线一二三区| 日韩视频一区| 中文字幕一区二区三区在线乱码| 国产亚洲精品美女久久| 国产综合久久久久久| 竹内纱里奈兽皇系列在线观看| 久久久电影免费观看完整版| 日韩亚洲视频在线观看| 日韩欧美在线一区二区三区| 天堂av8在线| 男插女免费视频| av免费看在线| 亚洲欧美激情另类校园| 国产99对白在线播放| 色一区在线观看| 精品无码久久久久久久| 一区免费观看视频| 欧美图片第一页| 成人小视频免费观看| 中文字幕12页| 奇米在线7777在线精品| 欧美日韩亚洲一| 黄色成人av网站| 9l视频自拍9l视频自拍| 精品精品99| 蜜桃av噜噜一区二区三区| youjizzjizz亚洲| 91亚洲一区精品| 激情中国色综合| 国产精品99久久99久久久二8| av影院在线免费观看| 欧美尺度大的性做爰视频| 在线免费黄色| 亚洲亚裔videos黑人hd| 深夜福利视频在线观看| 日韩av影视综合网| 亚洲第一视频在线| 日韩欧美三级在线| www.xxx国产| 欧美一区二区私人影院日本| 国产一区二区视频免费观看 | 久久天堂电影网| a天堂中文在线| 亚洲香蕉伊综合在人在线视看| 青青草视频在线免费观看| 日韩精品视频在线| 完全免费av在线播放| 色999国产精品| 亚洲无玛一区| 99re久久最新地址获取| 亚洲欧洲精品在线| 久久精品国产大片免费观看| 亚洲国内在线| 亚洲精品一二三区区别| 资源网第一页久久久| 婷婷色综合网| 日韩精品第1页| 欧美日本一区| 国产www免费| 欧美综合国产| 第四色婷婷基地| 国内精品久久久久影院薰衣草| 天天操精品视频| 国产福利一区在线| 熟妇高潮一区二区| 久久久亚洲午夜电影| 国产一级久久久久毛片精品| 国产精品久久久一本精品 | 日本不卡视频一区| 91视频在线观看免费| 精品人妻中文无码av在线| 中文字幕亚洲在| 精品在线视频免费观看| 天天影视网天天综合色在线播放| 五月婷婷色丁香| 欧美无人高清视频在线观看| 国产精品爽爽久久久久久| 欧美第一区第二区| 四虎在线观看| 色黄久久久久久| 久草免费在线色站| 国产99久久精品一区二区 夜夜躁日日躁 | 国产精品尤物福利片在线观看| 欧美成人黄色| 国产精品久久一区二区三区| 亚洲+变态+欧美+另类+精品| 亚洲欧美日韩精品久久久| 欧美精品一卡| 九九视频精品在线观看| 国产精品99久久久久久久vr| av直播在线观看| 成人免费在线播放视频| 国产无人区码熟妇毛片多| 欧美色中文字幕| 狠狠躁日日躁夜夜躁av| 伊人亚洲福利一区二区三区| 亚洲无线看天堂av| 国产成人精品av| 91精品导航| 色综合666| 国产一区久久| 欧美在线aaa| 成人国产精品免费观看视频| 手机毛片在线观看| 亚洲午夜激情av| 亚洲资源在线播放| 亚洲精品国产精品国自产在线| 欧美成年黄网站色视频| 欧美在线欧美在线| 日韩成人视屏| 亚欧精品在线| 久久激情婷婷| 免费黄色三级网站| 亚洲精品国产第一综合99久久| 无码人妻久久一区二区三区不卡| 欧美不卡一区二区三区| 欧美高清视频| 国产精品a久久久久久| 噜噜噜天天躁狠狠躁夜夜精品 | 7777精品伊人久久久大香线蕉最新版| 色婷婷av一区二区三| 久精品免费视频| 久久久久毛片| 日本视频一区二区不卡| 亚洲中字黄色| 国产人妻黑人一区二区三区| 亚洲精品视频在线看| 91精品国产乱码久久久| 中文字幕精品网| 巨茎人妖videos另类| 精品久久久久久一区| 狠狠爱www人成狠狠爱综合网| 日韩av加勒比| 亚洲日本护士毛茸茸| 一区二区视频免费观看| 亚洲欧美三级伦理| 在线看片福利| 免费亚洲一区二区| 国产欧美亚洲一区| 香蕉视频污视频| 亚洲一区二区欧美日韩 | 狂野欧美性猛交xxxx| 日本在线一区| 日韩av一二三| www.99热| 欧美三级电影一区| 日本不卡不卡| 91精品在线观看视频| 偷拍欧美精品| 日日干日日操日日射| 亚洲日本va在线观看| 亚洲av无码乱码国产麻豆| 欧美国产极速在线| 狠狠一区二区三区| 免费在线观看亚洲视频| 91色九色蝌蚪| 国产一区二区视频网站| 在线观看国产精品日韩av| 国产91在线播放精品| 一区二区在线观| 国产乱码精品一区二区三区五月婷| 深夜福利影院在线观看| 欧美成人官网二区| 中文字幕成在线观看| 五月婷婷综合色| 国产一区亚洲一区| 一区二区三区免费高清视频| 日韩av最新在线| 巨茎人妖videos另类| 中国成人亚色综合网站| 国产suv精品一区二区883| 可以免费看的av毛片| 亚洲午夜国产成人av电影男同| 欧美成人aaa| 久久久久久久9| 久久综合国产精品| 一级黄色录像大片| 久久久久久成人精品| 免费成人av| 特级西西444www| 天天av天天翘天天综合网| av网站大全在线观看| 成人午夜影院在线观看| 午夜在线一区二区| 日韩av毛片在线观看| 亚洲第一区在线观看| 国产精品扒开腿做爽爽爽视频软件| 一本色道久久综合亚洲精品婷婷| 国产91精品精华液一区二区三区| 亚洲国产成人无码av在线| 最新国产精品拍自在线播放 | 亚洲精品久久久久中文字幕二区 | 亚洲日产国产精品| 亚洲精品色午夜无码专区日韩| 7777精品伊人久久久大香线蕉经典版下载 | 日本激情小视频| 欧美一区二区美女| 涩涩av在线| 国产精品久久成人免费观看| 99精品欧美一区二区三区综合在线| 中文字幕视频免费观看| 久久久久久久久国产精品| 欧美精品一二| 久久人妻少妇嫩草av无码专区 | 午夜久久久久久| 免费在线观看av网站| 开心色怡人综合网站| 国产91精品露脸国语对白|