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_

EasyCriteria – New Functionalities

Hello, how are you?

I am here to talk about the new version of the EasyCriteria framework.

To those that are not familiar with EasyCriteria, EasyCriteria is a framework that makes easier the JPA Criteria utilization.

The JPQL

select p from Person p

It would be translated to the following JPA Criteria:

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

That is a loot code to do a simple query. But, how do we solve this problem?

Just use the EasyCriteria framework. The query above could be executed like below:

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

With EasyCriteria is very easy to use JPA Criteria. Here are the EasyCriteria advantages:

  1. Allow JPA implementation portability: You could change your implementation to Hibernate, EclipseLink and OpenJPA without a problem.
  2. 100% test coverage test coverage
  3. Easy to use: EasyCriteria has the principle of exposing as little API as possible. The developer will use only the EasyCriteria interface.
  4. Good to be used by JPA rookies. Its methods are well detailed and documented.
  5. It can be found in the Maven repositories.

What is new in EasyCriteria?
The first this is the Criteria Transfer Object (CTO). Now it is possible to create an object in the view layer, without a EntityManager, to load all information related to the query to be executed in the database.
Check the code below to see how the CTO works:

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

It is very simples to build your query at the same layer that has the parameters, and send it to the business layer execute it.

The other new functionality of this version is the LowerCase comparison:

boolean toLowerCase = true;

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

The LowerCase was a functionality very requested by the framework users. If you want a functionality, just ask for it. [=

If you want to download the jar by the link, here is it:  https://code.google.com/p/easy-criteria/downloads/detail?name=EasyCriteria-2.2.2_2013-07-16.jar&can=1&q=#makechanges

If you want to use Maven to download it just add the dependency below:

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

I hope  that these new functions make your guys happy!

See you soon! o_