EasyCriteria 2.0 – JPA标准应该很容易
在今天的帖子中,我們將看到名為EasyCriteria的框架的新版本。 在這篇文章的結尾,我們將在博客中看到這里的內容。 不幸的是,JPA標準存在一個巨大的問題,即冗長。 為什么不變得更簡單? 像這樣認為EasyCriteria框架已經誕生,現在已經在2.0版中。 要使用JPA標準進行簡單的JPQL,需要以下代碼:
注意執行查詢所需的所有代碼:從Person p中選擇p。 檢查以下使用EasyCriteria進行相同條件的難易程度:
EasyCriteria<Person> easyCriteria = EasyCriteriaFactory.createQuery(entityManager, Person.class); easyCriteria.getResultList();1.0版和2.0版之間的區別在于將方法簡化為通用方法。 要比較=,> =,<,<=和其他方法的方法,只需使用如下所示的API:
easyCriteria.andGreaterThan('hairSize', 10.4f); // >easyCriteria.andGreaterOrEqualTo('height', 11.00d); // >=easyCriteria.andLessThan('totalBooksOwned', 30L); // <easyCriteria.andLessOrEqualTo('firstJobDate', firstJobDate); // <=easyCriteria.andJoinEquals('dogs', 'age', 15); // =easyCriteria.andJoinStringIn('dogs', 'name', names); // value in (x, i, z, ...)easyCriteria.andJoinStringLike('dogs', 'name', '%y');EasyCriteria框架的理想之一是向用戶公開盡可能少的API。 這樣思考,EasyCriteria在其API中添加了“ OR”條件,而沒有新的類。 下面看一下如何使用OR進行查詢:
select s from Song s where s.id = 1 or s.length = 40 or s.artist = 'Group 1 Crew'easyCriteria.orEquals('id', 1).orEquals('length', 40).orEquals('artist', 'Group 1 Crew');可以執行另一種OR:
select s from Song s where (s.id = 1) or (s.id = 2) or (s.length = 40) or (s.artist = 'Group 1 Crew')easyCriteria.orEquals('id', 1, 2).orEquals('length', 40).orEquals('artist', 'Group 1 Crew');并且可以進行復雜查詢,例如:
select s from Song s where (s.totalDownloads = 20 or s.weight = 10.00) and (s.price = 20.00 or s.type = :type)easyCriteria.orEquals(1, 'totalDownloads', 20L).orEquals(1, 'weight', 10.00f).orEquals(2, 'price', 20.00d).orEquals(2, 'type', SongType.PRAISE);將索引的想法添加到了與一組OR一起使用的API中。 第一個OR組由“ totalDownloads”和“ weight”組成,第二個組具有“ price”和“ type”作為元素。 作為默認索引,始終使用值1。 上面的標準可以寫成:
easyCriteria.orEquals('totalDownloads', 20L).orEquals('weight', 10.00f).orEquals(2, 'price', 20.00d).orEquals(2, 'type', SongType.PRAISE);可以創建一個查詢來執行上述查詢的逆運算,并以OR分隔AND:
select s from Song s where (s.id = 1 and s.name = 'Sing Out') or (s.id = 2 and s.name = 'Alive')easyCriteria.addAndSeparatedByOr(1, 'id', 1).addAndSeparatedByOr(1, 'name', 'Sing Out').addAndSeparatedByOr(2, 'id', 2).addAndSeparatedByOr(2, 'name', 'Alive');今天就這些了,希望您喜歡新版本。 認為此框架完整將需要很長時間。 我可以依靠Jo?oNeves(http://about.me/joaonevesfilho)和Sasaki(http://curriculum.rodrigosasaki.com/)來幫助實現OR功能。 在這里可以看到框架的官方頁面: http : //easycriteria.uaihebert.com/ 。 最好的是,它是開源的(http://code.google.com/p/easy-criteria/)。
關于該框架的其他事實是,使用Cobertura進行的測試100%覆蓋了該框架。 EasyCriteria已通過OpenJPA,EclipseLink和Hibernate進行了測試。 現在是時候尋求您的幫助了。 在測試的實現中發現錯誤; 如果您有5分鐘的時間在bug中投票,那就太好了。 通過您的投票,可以更快地更正該錯誤。
- EclipseLink:https://bugs.eclipse.org/bugs/show_bug.cgi?id = 386354
- OpenJPA:https://issues.apache.org/jira/browse/OPENJPA-2333
- 休眠:https://hibernate.onjira.com/browse/HHH-7985
博客中會有什么? 我寫這篇文章花了很多時間,因為我正在寫完第一本書。 如果神的旨意,這本書將在三月份發行。 在這里的新帖子暫停中,我研究了很多Maven,我希望我的下一篇文章是有關基本Maven和完整Web應用程序的迷你書。 是的,我說“申請”是復數形式。
參考: EasyCriteria 2.0 –在uaiHebert博客上,我們的JCG合作伙伴 Hebert Coelho 應該可以輕松制定JPA Criteria 。
翻譯自: https://www.javacodegeeks.com/2013/02/easycriteria-2-0-jpa-criteria-should-be-easy.html
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的EasyCriteria 2.0 – JPA标准应该很容易的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 汽车之家亮相2023服贸会 探讨新能源汽
- 下一篇: 方法内联在JVM中有多积极?