你好!你好吗?
我很高兴宣布uaiCriteria的发布,EasyCriteria的演进。
确实需要更改框架名称吗? 是的,可悲的是。 我找到了另一个具有相同名称的框架 ,这就是为什么我决定更改名称的原因(我不希望有任何法律问题)。 该框架的区别在于,其他框架都可以使用MetaModel,而uaiCriteria可以使用字符串作为参数。
关于框架名称更改:
- 您的代码可以在此新版本上正常使用,该代码是复古兼容的
- 所有EasyCriteria类均以@Deprecated注释,并将在下一版本中删除。
- 新类具有旧版本的所有方法。 如果要更改新代码,只需“ 替换 ”代码中的UaiCriteria文本EasyCriteria
- 同样,我不想更改框架名称,但是我不想法律问题
框架现在有了吉祥物:
新版本有很多新东西。 让我们先谈一下结构变化:
- 该站点已更改,现在是http://uaicriteria.com
- 存储库已经更改,现在在GIT上(很多开发者都要求) https://github.com/uaihebert/uaicriteria
- SONAR插件已添加到pom.xml中,以帮助编写代码代码覆盖率和静态分析:
- 旧站点将被停用,但是所有旧文档都已迁移。
- 当前的API有一些条件限制,在条件中使用HAVING是不可能的。 我们将创建一个用于复杂条件的新接口/ API-我正在为新接口寻找新名称,您能建议我一个吗? (:
让我们谈谈新功能:
欢迎来到巴图
Batoo是EclipseLink或Hibernate之类的JPA提供程序。 在这个新版本中,我们使用Batoo测试了很多方法。
注意,我讲的是“很多方法”,但不是大多数方法。 不幸的是Batoo在JPQL和Criterias方面存在一些问题,我无法用它涵盖大多数方法。
uaiCriteria框架几乎支持EclipseLink,Hibernate和OpenJPA的所有方法。
多选
可以选择要返回的属性:
selectp.name,p.age
from Person p
如果我们在条件中转换上面的JPQL:
finalUaiCriteria<Person> uaicriteria =UaiCriteriaFactory.UaiCriteriaFactory.createMultiSelectCriteria(entityManager, Person.class);uaiCriteria.addMultiSelectAttribute("name").addMultiSelectAttribute("age");finalList multiselectList = uaiCriteria.getMultiSelectResult();
有关上述代码的一些注意事项:
- 如果仅选择一个属性,则将返回对象
- 如果您选择多个属性,则将返回Object []
- JPA提供程序可能返回Vector而不是Object [](在我的测试中,EclipseLink返回了Vector)
子查询
现在可以执行如下子查询:
select p from Person p
where p.id in(select dog.person.id from Dog dog where dog.cute = true)
我不会谈论完成上面的JPQL所需的几行本地JPA标准,但是使用UaiCriteria非常容易做到:
final UaiCriteria<Person> uaiCriteria = UaiCriteriaFactory.createQueryCriteria(Person.class);final UaiCriteria<Dog> subQuery = uaiCriteria.subQuery("person.id", Dog.class); // dog.person.idsubQuery.andEquals("cute", true);uaiCriteria.andAttributeIn("id", subQuery); //person.id
您需要做的就是创建一个子查询来通知其返回值。 然后调用根条件的方法attributeIn。
MapIsEmpty [否]
isEmpty方法可用于地图:
uaiCriteria.andCollectionIsEmpty("ENTITY_MAP");
AttributeIn [NOT]
如果要验证值是否在JPQL之类的列表中,请执行以下操作:
select p
from Payment p
wherep.statusEnum in :enumList
您可以像上面这样创建JPQL:
final UaiCriteria<Payment> uaiCriteria = UaiCriteriaFactory.createQueryCriteria(Payment.class);uaiCriteria.andAttributeIn("statusEnum", Arrays.asList(StatusEnum.VALUE_01, StatusEnum.VALUE_02));
该属性可以是枚举,整数,字符串等。
MemberOf [NOT]
下面的查询:
select d
from Departament d
where :person member of d.employeeList
可以这样创建:
final UaiCriteria<Departament> uaiCriteria = UaiCriteriaFactory.createQueryCriteria(Departament.class);uaiCriteria.andIsMemberOf(person, "employeeList");
Count和CountRegularCriteria
现在可以使用MultiSelect条件进行计数。 count方法已重命名为countRegularCriteria() 。 它的工作方式与旧版本类似,只是名称被重构以使内容更加鲜明。
CountAttribute
有时您需要计算属性而不是实体:
select count(p.id)
from Person p
您可以像上面那样运行JPQL:
final UaiCriteria<Person> uaiCriteria = UaiCriteriaFactory.createMultiSelectCriteria(Person.class);uaiCriteria.countAttribute("id");final List result = uaiCriteria.getMultiSelectResult();
GroupBy和聚合函数
现在可以使用聚合函数来执行GroupBy了:求和,求差,除法,模块等。
select sum(p.value), p.status
from Payment p
group by p.status
可以像这样执行:
final UaiCriteria<Payment> uaiCriteria = UaiCriteriaFactory.createMultiSelectCriteria(Payment.class);uaiCriteria.sum("id").groupBy("status");final List result = uaiCriteria.getMultiSelectResult();
新的Maven导入
如果要使用新版本,只需将以下xml添加到pom.xml中:
<dependency><groupId>uaihebert.com</groupId><artifactId>uaiCriteria</artifactId><version>4.0.0</version>
</dependency>
我希望你喜欢这个消息。
不要忘了访问新站点—————> http://uaicriteria.com
如果您有任何疑问,疑问或建议,请将其发布。
再见。
翻译自: https://www.javacodegeeks.com/2014/11/easycriteria-has-evolved-to-uaicriteria-new-name-and-more-features.html