Здравствуйте, как поживаете?
Я очень рад объявить о выпуске 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.agefrom 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 pfrom Payment pwhere 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 dfrom Departament dwhere :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.statusfrom Payment pgroup 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 . |

