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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

将JINQ与JPA和H2一起使用

發布時間:2023/12/3 编程问答 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 将JINQ与JPA和H2一起使用 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

幾天前,我讀了Iu Ming-Yee關于JINQ的有趣采訪 。 顧名思義,JINQ是一種嘗試提供類似于LINQ for Java的嘗試。 基本思想是縮小在關系數據模型上執行查詢的面向對象代碼之間的語義鴻溝。 關系數據庫模型的查詢應輕松集成到代碼中,以使其感覺更自然。

LINQ背后的研究得出的結論是,將代碼轉換為關系數據庫查詢的算法最適合功能代碼。 當Java 8附帶流API時,作者使用它來實現Java博士學位的想法。

為了弄清我們的手,我們從一個簡單的項目開始,該項目使用Hibernate over JPA以及H2數據庫和JINQ:

<dependencies><dependency><groupId>javax</groupId><artifactId>javaee-api</artifactId><version>${jee.version}</version><scope>provided</scope></dependency><dependency><groupId>com.h2database</groupId><artifactId>h2</artifactId><version>${h2.version}</version></dependency><dependency><groupId>org.hibernate</groupId><artifactId>hibernate-entitymanager</artifactId><version>${hibernate.version}</version></dependency><dependency><groupId>org.jinq</groupId><artifactId>jinq-jpa</artifactId><version>1.8.10</version></dependency> </dependencies>

為了使用JINQ流,我們必須創建一個將EntityManagerFactory作為參數的提供程序:

EntityManagerFactory factory = Persistence.createEntityManagerFactory("PersistenceUnit"); JinqJPAStreamProvider streams = new JinqJPAStreamProvider(factory);

將一些人插入我們的數據庫后,我們可以輕松地查詢他們:

List<String> firstNames = streams.streamAll(entityManager, Person.class).map(Person::getFirstName).collect(toList()); firstNames.forEach(System.out::println);

使用先前創建的JinqJPAStreamProvider streamAll()方法,我們可以訪問數據庫中的所有人員。 在這個簡單的例子中,我們只想輸出每個人的名字; 因此,我們map列表并將所有結果collect到List 。 使用forEach()方法和對println()方法的引用來打印此列表。

看一下生成的SQL代碼,我們看到選擇了所有列:

selectperson0_.id as id1_4_,person0_.FIRST_NAME as FIRST_NA2_4_,person0_.ID_CARD_ID as ID_CARD_4_4_,person0_.LAST_NAME as LAST_NAM3_4_, fromT_PERSON person0_

當然,我們可以使用select()方法來優化語句:

List<String> firstNames = streams.streamAll(entityManager, Person.class).select(Person::getFirstName).where(p -> p.equals("Homer")).collect(toList()); firstNames.forEach(System.out::println);

此外,我們還添加了一個謂詞( where firstName = 'Homer' ):

selectperson0_.FIRST_NAME as FIRST_NA2_4_ fromT_PERSON person0_ whereperson0_.FIRST_NAME='Homer'

留下這個簡單的示例,我們現在要創建一個查詢,以選擇在時間和物質項目中工作的所有具有“ Christian”名字的怪胎:

List<String> geeks = streams.streamAll(entityManager, Project.class).where(p -> p.getProjectType() == Project.ProjectType.TIME_AND_MATERIAL).joinList(Project::getGeeks).where(g -> g.getTwo().getFirstName().equals("Christian")).map(p -> p.getTwo().getFirstName()).collect(toList()); geeks.forEach(System.out::println);

從上面的代碼可以看出,我們使用第一個where()子句來選擇所有時間和材料項目。 joinList()調用連接了怪胎表,而隨后的where()子句還限制為僅選擇名字為“ Christian”的怪胎。 等等,這就是創建的SQL查詢:

selectgeek2_.FIRST_NAME as col_0_0_ fromT_PROJECT project0_ inner joinT_GEEK_PROJECT geeks1_ on project0_.id=geeks1_.PROJECT_ID inner joinT_GEEK geek2_ on geeks1_.GEEK_ID=geek2_.id whereproject0_.projectType='TIME_AND_MATERIAL'and geek2_.FIRST_NAME='Christian' limit ?

結束語 :前一段時間使用JPA的標準API,我必須說,使用JINQ的第一步更直觀,更容易寫下。 通過使用Java 8中的流,JINQ確實有助于縮小關系數據庫世界之間的鴻溝。

翻譯自: https://www.javacodegeeks.com/2016/04/using-jinq-jpa-h2.html

總結

以上是生活随笔為你收集整理的将JINQ与JPA和H2一起使用的全部內容,希望文章能夠幫你解決所遇到的問題。

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