You are on page 1of 23

Java Enterprise Edition - JEE

04. Queries avanadas para relatrios

Esp. Mrcio Palheta


gtalk: marcio.palheta@gmail.com
1

Trabalhando com JPQL




Quando listamos as contas existentes,


usamos o cdigo:





em.createQuery(from Conta).getResultList();

No precisamos saber o nome da tabela;


No from Conta, a consulta vai devolver
todos os objetos do tipo Conta;
Essa consulta OO conhecida como Java
Persistence Query Language - JPQL
2

Conhecendo a JPQL


A forma resumida from Conta uma


feature oferecida pelo Hibernate, no
garantida pela especificao;
Por isso, vamos adotar a forma padro:


Select m from Movimentacao m;

Usamos o apelido da classe (m) para


acessar seus atributos;
3

Definindo a posio dos


parmetros

Trabalhar com a posio dos


parmetros pode se tornar difcil
quando temos um grande nmero de
parmetros;
4

Definio de nomes de
parmetros


Named Parameter Notation definimos


apelidos para os parmetros;

Exerccio 01 Atualizao da
MovimentacaoDAO

Exerccio 02




Crie a classe TesteListagem;


Na nova classe, crie um mtodo main();
No mtodo, adicione vrias
movimentaes para uma conta;
Teste a listagem de movimentaes por
conta;

Exerccio 03 - Filtro por valor e


tipo de movimentao


Inclua o seguinte mtodo listar() na


classe MovimentacaoDAO:

Exerccio 04


Atualize a classe TesteListagem, criada


no exerccio 02;
Inclua cdigo para testar a listagem que
usa filtro por valor e tipo da
movimentao;

Usando funes


Agora precisamos disponibilizar uma


consulta que informe quanto o usurio
movimentou em uma determinada
conta;
Podemos usar a funo de agregao
sum() para realizar a soma dos valores;

10

Somatrio de movimentaes


O cdigo abaixo mostra o uso do


query.getSingleResult(), que devolve
um Object;

11

Objetos TypedQuery


No queremos ficar fazendo cast dos


resultados das consultas;
Para isso, podemos informar o tipo de
retorno das consultas
Basta usarmos uma sobrecarga de
EntityManager.createQuery(), que
recebe um segundo parmetro,
indicando o tipo de retorno;
12

Exerccio 05


Inclua o mtodo a seguir na classe


MovimentacaoDAO:

13

Exerccio 06


Outro requisito do nosso sistema que,


dado um titular, seja devolvida uma lista
com todas as suas movimentaes;
Atualize MovimentacaoDAO com:

14

Exerccio 07


Atualize a classe TesteListagem para


testar o clculo do movimento de uma
conta(exerccio 05);
Inclua na TesteListagem o teste
listagem de movimentaes por titular
(exerccio 06);

15

Relatrio mensal


Precisamos de um relatrio para saber


o total movimentado por ms e tipo de
movimentao;
Precisamos agrupar as movimentaes
do mesmo tipo Group By;
Como estamos cadastrando a data,
precisamos extrair o ms da
movimentao;
16

Cdigo JPQL


A figura a seguir mostra a instruo a


ser utilizada:

Mas o que seria retornado pelo mtodo


getResultList()?
17

Exerccio 08


Podemos criar uma classe para


armazenar os valores retornados pela
consulta do slide anterior;

18

Exerccio 09


Novo mtodo de MovimentacaoDAO

19

Exerccio 10



Atualize a classe TesteListagem;


Teste o novo mtodo da classe
MovimentacaoDAO;

20

Named Queries


Centralizar as queries:

Usar as queries armazenadas

21

Referncias




www.caelum.com.br
http://hibernate.org/docs
Hall, Marty, Core Servlets and Java Server
Pages, Janeiro 2002, Sun Microsystems
Press;
http://java.sun.com/j2ee/1.6/docs/tutorial/d
oc/index.html
http://java.sun.com/blueprints/corej2eepatte
rns/Patterns/index.html
22

Java Enterprise Edition - JEE


04. Queries avanadas para relatrios

Esp. Mrcio Palheta


gtalk: marcio.palheta@gmail.com
23

You might also like