EasyCriteria – Novas funcionalidades

Olá pessoal, tudo bem?

Venho aqui falar da nova versão do EasyCriteria.

Para quem não conhece o EasyCriteria, ele facilita a utilização da Criteria Nativa do JPA.

A JPQL:

select p from Person p

Seria transformada no seguinte código em Criteria do JPA:

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();

Veja quanta linhas para uma simples rotina. Como resolver esse problema?

Basta utilizar o framework chamado EasyCriteria:

EasyCriteria<Person> easyCriteria = EasyCriteriaFactory.createQueryCriteria(entityManager, Person.class);
easyCriteria.getResultList();

Veja como ficou fácil utilizar Criteria com JPA. As vantagens do EasyCriteria são diversas:

  1. Permite portabilidade: Você pode trocar entre as seguintes implementações Hibernate, EclipseLink e OpenJPA sem problemas.
  2. 100% de cobertura nos testes. test coverage
  3. Facilidade na utilização: EasyCriteria tem como princípio exportar o mínimo de API possível para o usuário. O desenvolvedor precisaria apenas utilizar a Interface EasyCriteria para realizar todas as operações.
  4. Boa ferramenta para iniciantes em JPA, pois a API tem seus métodos bem explicados e fáceis de utilizar.
  5. Está no repositório do Maven.

E o que existe de novidades na nova versão?

A primeira novidade é o conceito de Criteria Transfer Object (CTO). Agora é possível criar um objeto na view, sem a necessidade do EntityManager, para carregar todas as informações relacionadas a pesquisa e aplicar na consulta.

Veja como funcionaria o conceito de CTO abaixo:

public void controllerMethod(Integer id){
   EasyCriteria easyCTO = EasyCriteriaFactory.createEasyCTO();
   easyCTO.andEquals("id", id);

   myDAO.deactivateCar(easyCTO);
}
// and in the method
public void deactivateCar(EasyCriteria easyCTO){
    EasyCriteria<Car> easyCriteria = EasyCriteriaFactory.createQueryCriteria(entityManager, Car.class, easyCTO);
    Car car = easyCriteria.getSingleResult();
    car.deactivateCar();
}

Agora é bem simples e fácil montar sua query onde já existem os parâmetro e depois enviá-las para a camada de negócio/repositório. [=

E a outra novidade é permitir a comparação por LowerCase:

boolean toLowerCase = true;

EasyCriteria<Person> easyCriteria = EasyCriteriaFactory.createQueryCriteria(getEntityManager(), Person.class);
easyCriteria.andEquals(toLowerCase, "name", "MARY");

Essa estava sendo também uma das funcionalidades mais pedidas pelos usuários do framework. Se você quiser uma funcionalidade também, basta pedir. [=

Para fazer o download manual, é possível baixá-lo aqui: https://code.google.com/p/easy-criteria/downloads/detail?name=EasyCriteria-2.2.2_2013-07-16.jar&can=1&q=#makechanges

Para baixar pelo Maven, basta adicionar a dependência abaixo:

<dependency>
	<groupId>uaihebert.com</groupId>
	<artifactId>EasyCriteria</artifactId>
	<version>2.2.2</version>
</dependency>

Espero que as novas funcionalidades possam agradar a vocês.

Até a próxima! o_

6 thoughts on “EasyCriteria – Novas funcionalidades

  1. Bom dia Hebert,

    Aonde trabalho estou acostumado a utilização do Hibernate, entretanto achei bastante interessante esta nova API, pois parece que abstrai bastante código. Pela sua experiência, sabe me dizer se ela possuí alguma limitação em termos de desenvolvimento ou já é tão apta quanto o próprio Hibernate?

    Espero ter sido claro, obrigado.

    • Henrique, boa tarde.

      Infelizmente a API do EasyCriteria ainda não é tão completa como a do Hibernate.

      Estou trabalhando agora para ser possível fazer múltiplos joins como:
      easyCriteria.andEquals(“pessoa.cachorros.pulgas”);

      Espero em um ano, ou um ano e meio já estar bem próximo de disponibilizar todas as funções da Criteria do JPA. [=

      Obrigado pela visita e pelo apoio.

Leave a Comment