JPriuliFilter 2.0

Nova versão disponibilizada!!

A idéia do projeto é simples, um objeto chamado Filter armazena as condições, restrições e ou parâmetros que deverão ser utilizados na montagem de uma query. O projeto converte os parâmetros armazenado no Filter e cria os objetos do JPA2 ou Hibernate de uma maneira simples e pratica.

Exemplo Hibernate

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

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 codigo acima criara o hql:

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 Filter também pode ser criado a partir de entidades preenchidas, similiar ao Example do hibernate.
O Filtro não suporta todas as funcionalidades disponibilizadas pelos frameworks ORM, porem as principais estão implementadas.
Na versão 2.0 os seguinte itens foram realizados:

-Integração com o JPA2
-Join recursivos e de segundo nivel
-Implementação de fetch type
-Novas condições e restrições disponibilizadas
-Reestruturação
-Testes de unidades

Mais informações: http://felipepriuli.wordpress.com/2012/09/18/jpriuli-filter-2-0/
Download: http://sourceforge.net/projects/priuli-filter/
Projeto de exemplos: http://sourceforge.net/projects/priuli-filter/files/v2.0/eclipse_example_project/

Parabéns pelo projeto.

Exemplo com a condição IN:

Selecionando pessoas quem tem os números de telefone igual a 5683543 e 89548345

ArrayList numbers = new ArrayList(); numbers.add(5683543L); numbers.add(89548345L); Filter filter = FactoryFilter.createFilter("phones.number", numbers); // Filter similar to = select p from Person p inner join Phone ph on ph.person = p.id where p.number in ( 5683543 , 89548345 ) List people = personDAO.find(filter); for (Person person: people) { //... }

Disponibilizei uma nova versão deste projeto. Nela foram adicionadas novas funcionalidades para: In, NotIn, Or;

No link abaixo, segue resumo do funcionamento do projeto e exemplos de cada funcionalidade.

Mais informações: http://felipepriuli.wordpress.com/2013/03/21/jpriulifilter-referencia/