Здравствуйте, как поживаете?
Я очень рад объявить о выпуске uaiCriteria, эволюции EasyCriteria.
Действительно ли нужно было изменить имя фреймворка? Да, к сожалению, это было. Я нашел другой фреймворк с тем же именем , поэтому я решил изменить имя (я не хочу никаких юридических проблем). Отличие каркаса заключается в том, что другой каркас работает с MetaModel, а uaiCriteria работает со строками в качестве параметров.
Об изменении имени фреймворка:
- Ваш код будет работать с этой новой версией без проблем, код является ретро-совместимым
- Все классы EasyCriteria помечены @Deprecated и будут удалены в следующей версии
- В новых классах есть все методы старой версии. Если вы хотите изменить новый код, просто « замените » текст EasyCriteria на UaiCriteria в своем коде.
- Опять же, я не хотел менять имя фреймворка, но я не хочу юридических проблем
У фреймворка теперь есть талисман:
В новой версии много нового. Давайте поговорим сначала о структурных изменениях:
- Сайт изменился, сейчас http://uaicriteria.com
- Репозиторий изменился, теперь находится в GIT (запрошено многими разработчиками) https://github.com/uaihebert/uaicriteria
- Плагин SONAR был добавлен в pom.xml, чтобы помочь с кодом покрытия кода и статического анализа:
- Старый сайт будет деактивирован, но вся старая документация была перенесена.
- Текущий API имеет некоторые ограничения по критериям, использование HAVING в критериях является невозможным. Мы создадим новый интерфейс / API для использования со сложными критериями — я ищу новое имя для нового интерфейса, не могли бы вы мне его предложить? (:
Давайте поговорим о новых функциях:
Добро пожаловать в Бату
Batoo — провайдер JPA, такой как EclipseLink или Hibernate. В этой новой версии мы получили большое количество методов, протестированных с помощью Batoo.
Обратите внимание, что я говорил о «большом количестве методов», но не о большинстве методов. К сожалению, у Batoo есть несколько проблем с JPQL и критериями, и я не смог охватить большинство методов с ним.
Фреймворк uaiCriteria поддерживает практически все методы с EclipseLink, Hibernate и OpenJPA.
Выбор из нескольких вариантов
Можно выбрать, какие атрибуты будут возвращены:
1
2
3
4
5
|
select p. name , p.age from Person p |
Если мы преобразуем JPQL выше в критерии:
1
2
3
4
5
6
7
|
finalUaiCriteria<Person> uaicriteria = UaiCriteriaFactory.UaiCriteriaFactory.createMultiSelectCriteria(entityManager, Person. class ); uaiCriteria.addMultiSelectAttribute( "name" ) .addMultiSelectAttribute( "age" ); finalList multiselectList = uaiCriteria.getMultiSelectResult(); |
Некоторые соображения по поводу кода выше:
- Объект будет возвращен, если вы выберете только один атрибут
- Объект [] будет возвращен, если вы выберете более одного атрибута
- Поставщик JPA может вернуть Vector вместо Object [] (в моих тестах EclipseLink возвращал Vector)
подзапрос
Теперь можно выполнить подзапрос, как показано ниже:
1
2
3
|
select p from Person p where p.id in ( select dog.person.id from Dog dog where dog.cute = true ) |
Я не буду говорить о нескольких линиях собственных критериев JPA, необходимых для выполнения JPQL выше, но с UaiCriteria это очень легко сделать:
1
2
3
4
5
6
7
|
final UaiCriteria<Person> uaiCriteria = UaiCriteriaFactory.createQueryCriteria(Person. class ); final UaiCriteria<Dog> subQuery = uaiCriteria.subQuery( "person.id" , Dog. class ); // dog.person.id subQuery.andEquals( "cute" , true ); uaiCriteria.andAttributeIn( "id" , subQuery); //person.id |
Все, что вам нужно сделать, это создать подзапрос, сообщающий о его возврате; затем вызовите метод attributeIn корневого критерия.
MapIsEmpty [НЕ]
Метод isEmpty можно использовать с картами:
1
|
uaiCriteria.andCollectionIsEmpty( "ENTITY_MAP" ); |
Атрибут В [НЕ]
Если вы хотите проверить, находится ли значение внутри списка, такого как JPQL:
1
2
3
4
|
select p from Payment p where p.statusEnum in :enumList |
Вы можете создать JPQL выше, как:
1
2
3
4
5
|
final UaiCriteria<Payment> uaiCriteria = UaiCriteriaFactory.createQueryCriteria(Payment. class ); uaiCriteria.andAttributeIn( "statusEnum" , Arrays.asList(StatusEnum.VALUE_01, StatusEnum.VALUE_02)); |
Атрибут может быть перечислением, целым числом, строкой и т. Д.
MemberOf [НЕ]
Запрос ниже:
1
2
3
|
select d from Departament d where :person member of d.employeeList |
Может быть создан как:
1
2
3
4
|
final UaiCriteria<Departament> uaiCriteria = UaiCriteriaFactory.createQueryCriteria(Departament. class ); uaiCriteria.andIsMemberOf(person, "employeeList" ); |
Count и CountRegularCriteria
Теперь можно сделать подсчет с критериями MultiSelect. Метод count был переименован в countRegularCriteria () . Он работает как старая версия, только название было переработано, чтобы сделать вещи более четкими.
CountAttribute
Иногда вам нужно посчитать атрибут вместо сущности:
1
2
|
select count (p.id) from Person p |
Вы можете запустить JPQL выше, например:
1
2
3
4
5
6
|
final UaiCriteria<Person> uaiCriteria = UaiCriteriaFactory.createMultiSelectCriteria(Person. class ); uaiCriteria.countAttribute( "id" ); final List result = uaiCriteria.getMultiSelectResult(); |
GroupBy и агрегатные функции
Теперь можно сделать GroupBy с агрегатными функциями: сумма, разность, деление, модуль и т. Д.
1
2
3
|
select sum(p.value), p.status from Payment p group by p.status |
Может быть выполнен как:
1
2
3
4
5
6
|
final UaiCriteria<Payment> uaiCriteria = UaiCriteriaFactory.createMultiSelectCriteria(Payment. class ); uaiCriteria.sum( "id" ).groupBy( "status" ); final List result = uaiCriteria.getMultiSelectResult(); |
New Maven Import
Если вы хотите использовать новую версию, просто добавьте xml ниже в ваш pom.xml:
1
2
3
4
5
|
< dependency > < groupId >uaihebert.com</ groupId > < artifactId >uaiCriteria</ artifactId > < version >4.0.0</ version > </ dependency > |
Надеюсь, вам понравились новости.
Не забудьте посетить новый сайт ———–> http://uaicriteria.com
Если у вас есть какие-либо сомнения, вопросы или предложения, просто опубликуйте их.
До скорой встречи.
Ссылка: | EasyCriteria превратилась в uaiCriteria. Новое имя и дополнительные функции от нашего партнера JCG Хеберта Коэльо в блоге uaiHebert . |