A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

Application Server & EJB3 Wesley Gonçalves da Silva

Apresentações semelhantes


Apresentação em tema: "Application Server & EJB3 Wesley Gonçalves da Silva"— Transcrição da apresentação:

1 Application Server & EJB3 Wesley Gonçalves da Silva wesleygsilva@yahoo.com.br http://balaprata.blogspot.com

2 JPA – Java Persistence API Perguntas e Respostas

3 3 Consultas Além do mapeamento e do CRUD, é fundamental que tenhamos meios de recuperar objetos (dados). A linguagem para isso nos bancos relacionais é a SQL – Structured Query Language -, cuja a intenção sempre foi de simplificar o acesso aos dados dentro do banco, informado “o quê”, sem que o “usuário” se preocupasse com o “como”. Declarativa.

4 4 Consultas class Query1 { public static void main (String[] args) { try { Class.forName("sun.jdbc.odbc.JdbcOdbcDriver").getInstance(); String url = "jdbc:odbc:meusCdsDb"; Connection conn = DriverManager.getConnection(url,“usr",“psw"); Statement stmt = conn.createStatement(); ResultSet rs; rs = stmt.executeQuery("SELECT Lname FROM Customers WHERE Snum = 2001"); while ( rs.next() ) { String lastName = rs.getString("Lname"); System.out.println(lastName); } conn.close(); } catch (Exception e) { System.err.println("Got an exception! "); System.err.println(e.getMessage()); }

5 5 Consultas Na especificação JPA está prevista uma interface padronizada chamada Query para representar o resultado de buscas realizadas e também especifica uma linguagem para consulta:JPQL (também chamada de EJB-QL) Como ponto-chave básico de diferença para o SQL, nos referenciamos a objetos e, com isso, muitos comandos acabam sendo simplificados se comparados a um equivalente em SQL

6 6 Consultas Uma Query é criada a partir do EntityManager (o grande mago do JPA) Desde as versões anteriores do EJB já existia a especificação da EJB-QL, porém era muito limitada tendo aplicabilidade para questões mais simples. Conclusão: Escrevia SQL direto!

7 7 Consultas – Se parece com...

8 8 Consultas - Exceções De maneira geral as exceções ligadas a JPA são RuntimeException, ou seja, Unchecked O que significa que você não tem obrigação de capturá-las em blocos try/catch, porém o compilador também não te ajuda O interessante dessa abordagem é que você tratará o que realmente for relevante. É uma decisão de projeto!

9 9 Consultas – API

10 10 Consultas – API

11 JPA – Java Persistence API Teoria e Prática

12 12 Um pequeno exemplo de apoio

13 13 Consulta com parâmetros

14 14 Consulta com parâmetros Crie as classes devidamente anotadas em um novo projeto eclipse Crie uma consulta para recuperar os fornecedores, a partir do seu nome

15 15 Consulta Paginada

16 16 Consulta Paginada Baseando-se na consulta anterior, adicione paginação. Exiba a lista recuperada na console

17 17 Consulta Navegando

18 18 Consulta Navegando A partir de uma conta a pagar conhecida, recupere o nome do fornecedor, navegando pelo relacionamento entre eles

19 19 Consulta com construtor

20 20 Consulta com construtor Este recurso é um dos mais importantes, pois oferece flexibilidade (liberdade) que as aplicações precisam para suas consultas, mantendo as facilidades da jpa

21 21 Consulta com construtor Crie uma consulta com construtor com os dados: descrição da conta, valor e nome do fornecedor para contas pagas

22 22 Muitas Consultas

23 23 Muitas Consultas Crie uma consulta para exibir as contas dos fornecedores. Quantas consultas foram realizadas ao banco de dados? Crie uma outra consulta similar usando o “LEFT JOIN FETCH”. Quantas consultas foram feitas?

24 24 Operadores Navegação: “.” Aritméticos: “+”; “-”; “*”; “/” Comparação: =, >, >=,, like, between, in, is null, is empty, member of Lógico: NOT, AND, OR

25 25 Operadores Consulte as contas com valor maior que $100 Consulte as contas que não foram pagas

26 26 Like

27 27 Like Faça uma consulta para listar todos os fornecedores que tenham a palavra “teste” na sua descrição

28 28 Funções (I) - String

29 29 Funções (II) - Números

30 30 Funções (III) – Data CURRENT_DATE, CURRENT_TIME, CURRENT_TIMESTAMP

31 31 Funções Crie consultas para exercitar o uso das funções (ao menos 1 consulta para cada grupo de função)

32 32 Funções de Agregação

33 33 Funções de Agregação Conte a quantidade de fornecedores Some o total de contas Informe a conta mais cara

34 34 Ordem!

35 35 Ordem! Recupere os fornecedores por ordem alfabética

36 36 Nome aos Bois Queries nomeadas são especialmente úteis para consultas pré-definidas (ex.: Funcionários que entram de férias no próximo mês) Anotadas em nível de classe A classe tem que ser uma @Entity Podem suportar parâmetros

37 37 Nome aos Bois Nome ÚNICO da consulta A consulta em si Lista de consultas cada consulta Pode ter parâmetros!

38 38 Nome aos Bois Crie queries nomeadas para suas entidades, uma para cada, com a respectiva exibição dos dados recuperados

39 39 Nome aos Bois, nativos De maneira similar, existe @NamedNativeQueries/ @NamedNativeQuery SQL!

40 JPA – Java Persistence API Teoria e Prática

41 JPA – Java Persistence API Um pouco de organização

42 42 DAO Data Access Object – Padrão criado para abstrair a complexidade de recuperação dos dados de uma fonte de dado qualquer (ex.: SGBD-R, XML) Pergunta: Preciso de DAO?

43 43 DAO class Query1 { public static void main (String[] args) { try { Class.forName("sun.jdbc.odbc.JdbcOdbcDriver").getInstance(); String url = "jdbc:odbc:meusCdsDb"; Connection conn = DriverManager.getConnection(url,“usr",“psw"); Statement stmt = conn.createStatement(); ResultSet rs; rs = stmt.executeQuery("SELECT Lname FROM Customers WHERE Snum = 2001"); while ( rs.next() ) { String lastName = rs.getString("Lname"); System.out.println(lastName); } conn.close(); } catch (Exception e) { System.err.println("Got an exception! "); System.err.println(e.getMessage()); }

44 44 DAO public class Dao { private Class classePersistente; private EntityManager em; public Dao(EntityManager em, Class aClasse){ this.em = em; this.classePersistente = aClasse; } public void create(T t){ em.persist(t); } public T retrieve(Long id){ return (T) em.find(classePersistente, id); }

45 45 DAO Pergunta: Preciso de DAO? CRUD? Posso usar o EntityManager... Para consultas específicas? Até faz sentido... Atenção quanto a herança... Composição não seria melhor? O seu DAO específico teria o DAO genérico como atributo e somente os métodos de interesse seriam delegados...

46 JPA – Java Persistence API Um pouco de organização

47 47 Exercícios 1) Liste prós e contras comparando SQL e JPQL 2) Faça cada exercício sugerido para o tópico “teoria e prática” 3) Crie o seu DAO genérico e realize os testes para o CRUD 4) Como deve ser feito para acessar uma “stored procedure” usando a JPA. Entenda “JPA” como um requisito para a sua solução.

48 48 Exercícios - Especial Considerando o modelo a seguir faça:

49 49 Exercícios - Especial 1) Crie todas as classes devidamente anotadas – padrão jpa – e crie o respectivo modelo físico no banco de dados 2) Crie os “Manager´s” para o modelo. Defina o seu critério e justifique a sua escolha para cada “manager” criado. 3) Defina uma padronização para as suas consultas nomeadas. 4) Crie consultas nomeadas para recuperar: a)Pessoas que nasceram num intervalo de datas; b)Lista de telefones de quem mora no bairro “COPACABANA”; c)A lista de pessoas que estão pendentes de devolução; d)A lista de pessoas que possuem contas começadas com “A”; e)Itens mais emprestados.

50 50 Exercícios - Especial 5) Crie consultas dinâmicas considerando os seguintes filtros: a) Pessoas com nome contendo uma letra qualquer e/ou nascimento em uma determinada data; b) xxxxxxxxx 6) Escolha duas consultas da questão 4 e as escreva usando consulta nomeada nativa. Compare com as consultas JPQL e dê sua impressão. 7) Escreva testes unitários para “exercitar” todos os métodos dos seus managers, inclusive para o acesso as consultas.

51 JPA – Java Persistence API Perguntas e Respostas


Carregar ppt "Application Server & EJB3 Wesley Gonçalves da Silva"

Apresentações semelhantes


Anúncios Google