1.0jpa 2.0_EasyCriteria 2.0 – JPA标准应该很容易

1.0jpa 2.0

在今天的帖子中,我们将看到名为EasyCriteria的框架的新版本。 在这篇文章的结尾,我们将在博客中看到这里的内容。 不幸的是,JPA标准存在一个巨大的问题,即冗长。 为什么不变得更容易? 像这样认为EasyCriteria框架已经诞生,并且现在已经在2.0版中。 要使用JPA标准进行简单的JPQL,需要以下代码:

CriteriaQuery<Person> criteriaQuery = criteriaBuilder.createQuery(Person.class);
Root<Person> root = criteriaQuery.from(Person.class);
criteriaQuery.select(root);
TypedQuery<Person> query = entityManager.createQuery(criteriaQuery);
query.getResultList();

注意执行查询所需的所有代码:从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
  • Hibernate: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

1.0jpa 2.0

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/349415.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python 从入门到实践_Python编程从入门到实践日记Day15

Python编程从入门到实践日记Day15第5章 字典(三)1.使用字典(三)—由类似对象组成的字典在前面的示例中&#xff0c;字典存储的是一个对象(游戏中的一个外星人)的多种信息&#xff0c;但你也可以使用字典来存储众多对象的同一种信息。例如&#xff0c;假设你要调查很多人&#x…

mysql创建文章表_创建表--文章表article

建MySQL数据表需要以下信息&#xff1a;表名表字段名定义每个表字段字段名 数据类型 数据属性数据属性:1. 无符号 unsigned(非负限定 ,即不能取负值) 取值范围 0–255&#xff1b;2. 主键索引 primary key(唯一,一张表推荐一个主键) &#xff1b;3. 自增 auto_increment &…

什么是JavaServer Faces(JSF)

这是一个分为两部分的系列&#xff0c;其中我介绍了JSF 2及其如何适合Java EE生态系统。 在第1部分中&#xff0c;我将介绍JavaServer Pages&#xff08;JSF&#xff09;背后的基本思想 &#xff0c;在第2部分中&#xff0c;将介绍Facelets声明语言 。 在构建Web应用程序时&a…

python地图散点图_在地图上叠加散点图(img)

好吧&#xff0c;这个问题是老问题&#xff0c;但我有一个不同的答案&#xff0c;可能会有人感兴趣。。。在 我一直在研究同一个问题。GitHub&#xff08;https://github.com/ageron/handson-ml.git&#xff09;上提供的代码可以满足您的需要&#xff08;请参见02“端到端机器学…

mysql创建表时添加范式_MySql三大范式与数据库设计和表创建常用语句

【数据库设计的三大范式】1.第一范式(1NF First Normal Fromate)&#xff1a;数据表中的每一列(字段)&#xff0c;必须是不可拆分的最小单元。也就是确保每一列的原子性。例如&#xff1a; userInfo: ‘山东省烟台市 13181621008’> userAds:’山东省烟台市’tel:’13181621…

asp listview 单元格文字颜色_如何替换CAD表格中特定区域单元格中的文字?

下面是本公众号文章分类目录&#xff0c;点击标题文字可打开分类文章列表&#xff1a;安装卸载 异常、退出 文件及输入输出 基本操作技巧 各种设置及相关问题 界面和显示相关问题 快捷键 视图设置和调整 图层 颜色 线型 字体、文字样式和文字输入 标注、引线和标注…

jvm 方法内联_方法内联在JVM中有多积极?

jvm 方法内联在IntelliJ IDEA中使用Ctrl Alt M 提取方法 。 Ctrl Alt M。 这就像选择一段代码并按此组合一样简单。 Eclipse也有它 。 我讨厌冗长的方法。 对于我来说&#xff0c;闻起来太久了&#xff1a; public void processOnEndOfDay(Contract c) {if (DateUtils.add…

php ssh 连接mysql_通过PHP中的SSH连接到MySQL服务器?mysql-问答-阿里云开发者社区-阿里云...

SSH隧道解决方案 设置到MySQL数据库服务器的SSH隧道(最好是通过Jumpbox以获得安全性)。(A)GUI工具 根据您的要求&#xff0c;您可以使用具有内置SSH隧道支持的GUI MySQL客户端(例如SequelPro)&#xff0c;使用Visual Studio代码 转发端口/创建SSH隧道或使用PuTTY设置端口转发。…

mybatis delete返回值_面试:谈谈你对MyBatis执行过程之SQL执行过程理解

前言在了解了MyBatis初始化加载过程后&#xff0c;我们也应该研究看看SQL执行过程是怎样执行&#xff1f;这样我们对于Mybatis的整个执行流程都熟悉了&#xff0c;在开发遇到问题也可以很快定位到问题。更重要的&#xff0c;在面试中遇到面试官咨询Mybatis的知识点的时候&#…

GC解释:堆

世代垃圾收集器 JVM堆分为两个不同的世代。 一种称为“年轻”&#xff0c;另一种称为“老”&#xff08;有时称为终身制&#xff09;。 年轻一代又分为两个主要的逻辑部分&#xff1a;伊甸园和幸存者空间。 垃圾收集人员还使用了虚拟空间供年轻人和老年人使用&#xff0c;以调整…

ubuntu设置mysql可以非本地访问_ubuntu server下设置mysql的远程访问权限

安装mysql安装mysql的方式较多主要有使用源安装&#xff0c;使用本地压缩包进行安装的方式。 具体参照 【ubuntu安装mysql5.5】检查mysql的远程访问权限eniZ944qtakg9Z:~$netstat -tl | grep mysql#tcp 0 0 127.0.0.1:3306 0.0.0.0:* LISTE…

python调用mysql数据库sql语句过长有问题吗_python操作mysql数据库,一次性执行多条语句不执行...

总结&#xff1a;1、使用这种方法&#xff0c;获取到的返回值总是最后一条命令的返回值&#xff0c;如果最后一条命令是update或者delete这种sql&#xff0c;则返回为&#xff08;&#xff09; 2、sql的每一条语句后面都需要添加一个分号&#xff0c;不然最后splice时候 &#…

mysql sql wait 写法_有关SQL语句写法注意的那些事情(原创整理)

前段时候针对开发做的SQL语句写法方面注意点的培训&#xff0c;特意总结了一下&#xff0c;也共享一下。书写SQL需要注意的若干问题(MySQL版)一、基本问题1&#xff0c;在系统中运行的SQL查询&#xff0c;先考虑一下能不能在Slave上检索&#xff0c;目前各个项目中Master上的不…

mysql 时间函数多了8小时_MySQL时间函数了解

NOW() -- 获取当前格式化时间原表mysql> CREATE TABLE blog (-> id INT PRIMARY KEY auto_increment,-> NAME CHAR (32),-> sub_time datetime-> ); Query OK, 0 rows affected (0.01 sec)mysql> INSERT INTO blog (NAME, sub_time)-> VALUES…

JUnit 5 –基础

JUnit 5是适用于Java的下一代单元测试框架&#xff0c;具有许多有趣的功能&#xff0c;包括嵌套测试&#xff0c;参数化测试&#xff0c;新的扩展API或Java 8支持。 本文展示了JUnit 5的基本概念&#xff0c;包括测试生命周期&#xff0c;参数注入和断言&#xff08;基本&…

mysql explain output_MySQL查询优化之explain的深入解析【转载】

在分析查询性能时&#xff0c;考虑EXPLAIN关键字同样很管用。EXPLAIN关键字一般放在SELECT查询语句的前面&#xff0c;用于描述MySQL如何执行查询操作、以及MySQL成功返回结果集需要执行的行数。explain 可以帮助我们分析 select 语句,让我们知道查询效率低下的原因,从而改进我…

char强制类型转换为int_C语言学习第5篇---类型转换概念理解

类型之间的转换1.C语言中的数据可以进行转换---强制类型转换---隐式类型转换强制类型转换1.强制类型转换的语法---&#xff08;Type&#xff09;var_name;---&#xff08;Type&#xff09;value;2.强制类型转换的结果---目标类型能够容纳目标值&#xff0c;结果不变---目标类型…

python 中求最大值问题_Python中用max()方法求最大值的介绍

max() 方法返回其参数最大值&#xff1a;最接近正无穷大的值。语法以下是max()方法的语法&#xff1a; max( x, y, z, .... )参数 x -- 这是一个数值表达式。 y -- 这也是一个数值表达式。 z -- 这是一个数值表达式。返回值此方法返回其参数的最大值。例子下面的例子显示了max(…

在项目中使用fastreport_如何在项目管理中使用里程碑

不管您的项目是什么&#xff0c;完成大工作都意味着朝目标端点迈出几步。正如您无法结束旅程一样&#xff0c;您的团队必须完成第一步&#xff0c;以便从下一个步骤开始并最终完成项目。这可能是设定里程碑的最大原因。毕竟&#xff0c;如果没有完成日期&#xff0c;则项目的一…

java nio的演进_Java接口的防御性API演进

java nio的演进API的发展绝对是不平凡的。 只有少数几个需要处理的事情。 我们大多数人每天都在使用内部专有API。 现代IDE附带了很棒的工具&#xff0c;可以分解&#xff0c;重命名&#xff0c;上拉&#xff0c;下推&#xff0c;间接&#xff0c;委托&#xff0c;推断&#xf…