Статьи

EasyCriteria превратилась в uaiCriteria.

Здравствуйте, как поживаете?

Я очень рад объявить о выпуске uaiCriteria, эволюции EasyCriteria.

Действительно ли нужно было изменить имя фреймворка? Да, к сожалению, это было. Я нашел другой фреймворк с тем же именем , поэтому я решил изменить имя (я не хочу никаких юридических проблем). Отличие каркаса заключается в том, что другой каркас работает с MetaModel, а uaiCriteria работает со строками в качестве параметров.

Об изменении имени фреймворка:

  • Ваш код будет работать с этой новой версией без проблем, код является ретро-совместимым
  • Все классы EasyCriteria помечены @Deprecated и будут удалены в следующей версии
  • В новых классах есть все методы старой версии. Если вы хотите изменить новый код, просто « замените » текст EasyCriteria на UaiCriteria в своем коде.
  • Опять же, я не хотел менять имя фреймворка, но я не хочу юридических проблем

У фреймворка теперь есть талисман:

талисман

талисман

В новой версии много нового. Давайте поговорим сначала о структурных изменениях:

  • Сайт изменился, сейчас http://uaicriteria.com
  • Репозиторий изменился, теперь находится в GIT (запрошено многими разработчиками) https://github.com/uaihebert/uaicriteria
  • Плагин SONAR был добавлен в pom.xml, чтобы помочь с кодом покрытия кода и статического анализа:

    uaicriteria cobertura

    uaicriteria cobertura

  • Старый сайт будет деактивирован, но вся старая документация была перенесена.
  • Текущий 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

Если у вас есть какие-либо сомнения, вопросы или предложения, просто опубликуйте их.

До скорой встречи.