Nesta nova versão, o projeto vem com novas funcionalidades para de deixar o código mais simples, mas também possui vários recursos para facilitar as consultas das entidades do Hiberbate ou JPA.
O projeto sofreu uma grande refatoração e por isto não mantem compatibilidade com a versão anterior. Porem, nesta nova versão existe a integração com o JPA2.

Segue, em ordem, as informações de como utilizar o projeto:

net.priuli.filter.Filter
Esta classe armazena os parâmetros que deverão ser usado como condições na sua consulta do JPA2 ou do Hibernate. Esta classe é um Map<String,Object> e a partir dela que as consultas são construídas.

net.priuli.filter.hibernate.CriteriaSelectBuilder
A classe acima transforma um ‘Filter’ em um objeto Criteria do Hibernate.

net.priuli.filter.jpa.QuerySelectBuilder
A classe acima transforma um ‘Filter’ em um objeto Query do JPA2.

Classes do pacote net.priuli.filter.criterion
São classes utilizadas para criar as condições e restrições da consulta, ou seja são os parâmetros que são adicionadas no objeto Filter.

Abaixo estão as classes do pacote ‘net.priuli.filter.criterion':

  • Between.java – Adiciona uma condição Between no Filter
  • Fetch.java – Ativa o Hibernate/JPA Fetch
  • Ignore.java – Ignora uma condição dentro do Filter
  • JoinMode.java – Permite usar uma união (join) na query
  • Like.java – Adiciona uma condição like no Filter
  • LikeMode.java – Tipos do Like
  • Limiter.java – Permite limitar valores (maior,menor,igual)
  • LimiterMode.java – tipos do limite
  • NotEqual.java – Adiciona uma condição != no Filter
  • Order.java – Permite ordenar o resultado
  • OrderMode.java – Tipos de ordenação
  • Range.java – Permite paginar os resultados.
  • RangeLimitImpl.java – Tipo de paginação via limite
  • RangeSimpleImpl.java – Tipo de paginação normal

As classes abaixo são opcionais mas permitem construir uma classe Filter a partir de uma entidade, ou seja as classes abaixo copiam os valores não-nulos de uma entidade e criam um Filter com estes valores.

net.priuli.filter.hibernate.HibernateFilterBuilder
Constrói um Filter a partir de uma entidade do hibernate. Todas as informações não nulas da entidade serão convertidas em condições e carregadas no Filter, inclusive os relacionamentos (join).

net.priuli.filter.jpa.JPAFilterBuider
Constrói um Filter a partir de uma entidade do JPA2. Todas as informações não nulas da entidade serão convertidas em condições e carregadas no Filter, inclusive os relacionamentos (join).

Códigos

Criando consultas Hibernate

Exemplo hibernate

Filter filter = FactoryFilter.createFilter("phones.number", new Between<Long>(5683543L, 89548345L));</p>

filter.add(new Order("phones.number",OrderMode.ASC));
filter.add(new Order("name",OrderMode.ASC));

Criteria criteria = new CriteriaSelectBuilder<Person>(session,Person.class).build(filter);

List<Person> person = criteria.list();

O código acima ira gerar um Hql similar:

select p from Person p inner join Phone ph on ph.person = p.id where p.number between 5683543 and 89548345 order by p.name asc, ph.number asc

Exemplo JPA2

Filter filter = FactoryFilter.createFilter();
filter.add("name",  new Like("JOHN",LikeMode.START));

Query query = new QuerySelectBuilder<Person>(entityManager, Person.class).build(filter);
List<Person> people = query.getResultList();

O código acima ira gerar um hql similar:

select p from Person p where p.name like 'JOHN%'

Links:

Código de exemplos: Exemplos

Projeto(SVN,CODE,DOWNLOAD): JPriuliFilter Download

Agradecimentos: Flavio Henrique Faria (Tester)

About these ads