1.0jpa 2.0_EasyCriteria 2.0 – JPA标准应该很容易
1.0jpa 2.0
在今天的帖子中,我們將看到名為EasyCriteria的框架的新版本。 在這篇文章的結(jié)尾,我們將在博客中看到這里的內(nèi)容。 不幸的是,JPA標(biāo)準(zhǔn)存在一個(gè)巨大的問題,即冗長(zhǎng)。 為什么不變得更容易? 像這樣認(rèn)為EasyCriteria框架已經(jīng)誕生,并且現(xiàn)在已經(jīng)在2.0版中。 要使用JPA標(biāo)準(zhǔn)進(jìn)行簡(jiǎn)單的JPQL,需要以下代碼:
注意執(zhí)行查詢所需的所有代碼:從Person p中選擇p。 檢查以下使用EasyCriteria進(jìn)行相同條件的難易程度:
EasyCriteria<Person> easyCriteria = EasyCriteriaFactory.createQuery(entityManager, Person.class); easyCriteria.getResultList();1.0版和2.0版之間的區(qū)別在于將方法簡(jiǎn)化為通用方法。 要比較=,> =,<,<=和其他方法的方法,只需使用如下所示的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進(jìn)行查詢:
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');可以執(zhí)行另一種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');并且可以進(jìn)行復(fù)雜查詢,例如:
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中。 第一個(gè)OR組由“ totalDownloads”和“ weight”組成,第二個(gè)組具有“ price”和“ type”作為元素。 作為默認(rèn)索引,始終使用值1。 上面的標(biāo)準(zhǔn)可以寫成:
easyCriteria.orEquals('totalDownloads', 20L).orEquals('weight', 10.00f).orEquals(2, 'price', 20.00d).orEquals(2, 'type', SongType.PRAISE);可以創(chuàng)建一個(gè)查詢來執(zhí)行上述查詢的逆運(yùn)算,并以O(shè)R分隔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');今天就這些了,希望您喜歡新版本。 認(rèn)為此框架完整將需要很長(zhǎng)時(shí)間。 我可以依靠Jo?oNeves(http://about.me/joaonevesfilho)和Sasaki(http://curriculum.rodrigosasaki.com/)來幫助實(shí)現(xiàn)OR功能。 在這里可以看到框架的官方頁面: http : //easycriteria.uaihebert.com/ 。 最好的是,它是開源的(http://code.google.com/p/easy-criteria/)。
關(guān)于框架的其他事實(shí)是,使用Cobertura進(jìn)行的測(cè)試100%覆蓋了該框架。 EasyCriteria已通過OpenJPA,EclipseLink和Hibernate進(jìn)行了測(cè)試。 現(xiàn)在是時(shí)候?qū)で竽膸椭恕?在測(cè)試的實(shí)現(xiàn)中發(fā)現(xiàn)錯(cuò)誤; 如果您有5分鐘的時(shí)間在bug中投票,那就太好了。 通過您的投票,可以更快地更正該錯(cuò)誤。
- EclipseLink:https://bugs.eclipse.org/bugs/show_bug.cgi?id = 386354
- OpenJPA:https://issues.apache.org/jira/browse/OPENJPA-2333
- Hibernate:https://hibernate.onjira.com/browse/HHH-7985
博客中會(huì)有什么? 我寫這篇文章花了很多時(shí)間,因?yàn)槲艺趯懲甑谝槐緯?如果神的旨意,這本書將在三月份發(fā)行。 在這里的新帖子暫停中,我研究了很多Maven,我希望我的下一篇文章是有關(guān)基本Maven和完整Web應(yīng)用程序的迷你書。 是的,我說“申請(qǐng)”是復(fù)數(shù)形式。
參考: EasyCriteria 2.0 –在uaiHebert博客上,我們的JCG合作伙伴 Hebert Coelho 應(yīng)該可以輕松制定JPA Criteria 。
翻譯自: https://www.javacodegeeks.com/2013/02/easycriteria-2-0-jpa-criteria-should-be-easy.html
1.0jpa 2.0
總結(jié)
以上是生活随笔為你收集整理的1.0jpa 2.0_EasyCriteria 2.0 – JPA标准应该很容易的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 全国最适合女性出家的寺院(中国女子出家的
- 下一篇: jvm 方法内联_方法内联在JVM中有多