Critérios para queries

11
Critérios para Queries Apresentado por: Rodrigo Vieira

description

Queries, Criterion, Hibernate

Transcript of Critérios para queries

Page 1: Critérios para queries

Critérios para Queries

Apresentado por:

Rodrigo Vieira

Page 2: Critérios para queries

Critérios para Queries

• Uma maneira de criar e conectar objetos simples de Java que agem como filtros para selecionar os seus resultados desejados.

• Um mecanismo que permite que você forneça

Objetos de exemplo para mostrar o que você está procurando, controlando quais detalhes importam e quais propriedades ignorar.

Page 3: Critérios para queries

Utilizando Critérios Simples

public static List tracksNoLongerThan(Time length, Session session) {

Criteria criteria = session.createCriteria(Track.class);

return criteria.list();

}

public static List tracksNoLongerThan(Time length, Session session) {

Criteria criteria = session.createCriteria(Track.class);

criteria.add(Restrictions.le("playTime", length));

return criteria.list();

}

public static List tracksNoLongerThan(Time length, Session session) {

return session.createCriteria(Track.clas). add(Restrictions.le("playTime", length)).list();

}

Page 4: Critérios para queries

Compondo Critérios

É possível incluir mais de um Critérion em sua query e todos eles devem ficar satisfeitos que os objetos sejam incluídos nos resultados. Criando mais de um Critério de query e como ordenar. public static List tracksNoLongerThan(Time length, Session session) { Criteria criteria = session.createCriteria(Track.class); criteria.add(Restrictions.le("playTime", length)); criteria.add(Restrictions.like("title", "%A%")); criteria.addOrder(Order.asc("title").ignoreCase()); return criteria.list(); }

Page 5: Critérios para queries

Podemos utilizar tambem para filtrar Strings.

criteria.add(Restrictions.like("title", “A”, MatchMode.ANYWHERE);

Se quiser fazer uma combinação sem distinção entre maiúscula e minúscula, utilize ilike em vez de like.

criteria.add(Restrictions.ilike("title", “A”, MatchMode.ANYWHERE);

Page 6: Critérios para queries

Se quiser encontrar quaisquer objetos que combinem com qualquer um de seus critérios, em vez de exigir que eles se encaixem com todos os critérios, é preciso utilizar:

Restrictions.disjunction();

public static List tracksNoLongerThan(Time length, Session session) {

Criteria criteria = session.createCriteria(Track.class);

Disjunction any = Restrictions.disjunction();

any.add(Restrictions.le("playTime", length));

any.add(Restrictions.like("title", "%A%"));

criteria.add(any);

criteria.addOrder(Order.asc("title").ignoreCase());

return criteria.list();

Page 7: Critérios para queries

Projeção e Agregação com Critérios

• Projeção – Significa simplesmente que você não precisa de todas as informações disponíveis em uma tabela.

• Agregação – Semelhantemente, envolve a identificação de propriedades, assim podendo pedir informações estáticas dessas propriedades, como valores de contagem, ou encontrar valores máximos, mínimos ou médios.

Page 8: Critérios para queries

Obtendo uma projeção e que estamos interessados especificamente em recuperar a propriedade do titulo das faixas que encontramos.

public static List titlesContainingText(String text, Session session) {

Criteria criteria = session.createCriteria(Track.class); criteria.add(Restrictions.like("title", text, MatchMode.ANYWHERE).ignoreCase());

criteria.setProjection(Projections.property("title"));

return criteria.list();

[java] - [Video Killed the Radio Star, Gravity´s Angel]

Page 9: Critérios para queries

Se recuperássemos as durações da faixa, o resultado seria esse :

criteria.setProjection(Projections.property(“playTime"));

[java] - [00:03:49, 00:06:06]

Page 10: Critérios para queries

• O método projectionList() cria uma instância ProjectionList que pode conter escolhas multiplas de projeção para uma única query com critérios.

public static List titlesContainingTextWithPlayTimes(String text, Session session) {

Criteria criteria = session.createCriteria(Track.class);

criteria.add(Restrictions.like("title", text, MatchMode.ANYWHERE).ignoreCase());

criteria.setProjection(Projections.projectionList().

add(Projections.property("title")).

add(Projections.property("playTime")));

return criteria.list();

} [java] Title: Video Killed the Radio Star (Play Time: 00:03:49)

[java] Title: Gravity´s Angel (Play Time: 00:06:06)

Page 11: Critérios para queries

OBRIGADO