Escolar Documentos
Profissional Documentos
Cultura Documentos
A Plataforma Java
| 2
| 3
GC
Garbage Collector
| 5
Garbage Collector
Pode ainda ser configurado manualmente indicando quais algoritmos devem ser utilizados.
| 6
Gerncia de Memria
Apesar de podermos confiar no Garbage Collector tambm podemos ter Memory Leaks em Java
| 7
Problema
} //Fechamento da classe
Gerncia de Memria
Mesmo nesse exemplo simples o Leak no fcil de ser percebido a primeira vista Existem situaes que deixam o Leak ainda mais obscuro
| 11
Configurao do ambiente
| 12
O HSQLDB
| 13
Configurando o HSQLDB
1 Passo Montando o ambiente:
Deszipar o contedo do arquivo HSQLDB.zip na raiz de nosso projeto. Aps deszipar o arquivo temos a estrutura de diretrios: <Raiz do Projeto>
HSQLDB
data Lib UTILS
| 14
Configurando o HSQLDB
2 Passo Criando o banco de dados:
Executar o servidor HSQLDB
Execute o arquivo de lote hsqldbrunme.bat
| 16
MR do banco
| 17
Configurando o HSQLDB
3 Passo Configurando o driver JDBC:
Para configurar o driver JDBC no projeto basta colocar o hsqldb.jar no CLASSPATH
Nas propriedades do projeto selecione Java Build Path na aba Libraries boto Add JARs
| 18
Classes
DriverManager Date Time
| 19
| 20
Driver
Um Driver JDBC uma camada intermediria que traduz chamadas API JDBC em chamadas s APIs proprietrias do banco de dados
DriverManager
Gerencia os Drivers carregados permitindo a conexo com o banco de dados
Driver a ser carregado e disponibilizado para o DriverManager
Class.forName("org.hsqldb.jdbcDriver"); Class.forName("org.hsqldb.jdbcDriver"); String url = "jdbc:hsqldb:hsql://localhost:9090/dbc"; "jdbc:hsqldb:hsql://localhost:9090/dbc"; DriverManager.getConnection(url, sa", DriverManager.getConnection(url, sa", "");
| 22
Connection
Representa a conexo com o banco de dados A partir da conexo, consultas SQL so enviadas para o banco de dados e so retornadas as respostas
Class.forName("org.hsqldb.jdbcDriver"); Class.forName("org.hsqldb.jdbcDriver"); String url = "jdbc:hsqldb:hsql://localhost:9090/dbc"; "jdbc:hsqldb:hsql://localhost:9090/dbc"; DriverManager.getConnection(url, sa", DriverManager.getConnection(url, sa", "");
| 23
| 24
Statement
Permite o envio de comandos SQL para o SGBD
executeQuery()
Utilizado com comandos que retornam alguma resposta
executeUpdate()
Utilizado com comandos do tipo INSERT, UPDATE e DELETE
execute()
Utilizado com comandos que retornam mltiplos resultados. Ex: Stored Procedures
Statement stmt = con.createStatement(); String sql = "INSERT INTO TB_CLIENTE VALUES('293857338-65', VALUES('293857338+ 'JORGE' )"; stmt.executeUpdate(sql);
| 25
ResultSet
Utilizado para acessar o resultado da execuo de um Statement
String sql = "SELECT * FROM TB_CLIENTE"; Statement stmt = con.createStatement(); ResultSet rs = stmt.executeQuery(sql); while (rs.next()) { String cpf = rs.getString("CPF"); String nome = rs.getString("NOME"); }
| 26
PreparedStatement
Representa um Statement pr-compilado
String sql = "UPDATE USUARIO SET SENHA = ? WHERE LOGIN = ?"; PreparedStatement updateSales = con.prepareStatement(sql); updateSales.setString(1, "geraldo"); updateSales.setString(2, "jglj"); updateSales.executeUpdate();
| 27
Edited by Foxit Reader Copyright(C) by Foxit Software Company,2005-2006 For Evaluation Only.
| 28
Hibernate
Introduo
| 30
Hibernate
hibernate.cfg.xml Mapeamento Annotations Mapeamento XML
| 31
Principais Caractersticas
Programao Orientada Objetos
| 32
| 33
| 34
Alta Escalabilidade
Hibernate implementa algumas otimizaes
| 35
Linguagem de Busca
HQL (Hibernate Query Language)
Sintaxe parecida com SQL
Orientada a objetos
Herana Polimorfismo Associao
| 36
Configurao do Hibernate
Configurao do Hibernate
Pode ocorrer de duas formas:
Atravs de uma instncia de org.hibernate.cfg.Configuration Atravs do arquivo de configurao
hibernate.cfg.xml
Essa instncia ou arquivo so carregados pela SessionFactory O hibernate.cfg.xml devem est na raiz do projeto
| 38
hibernate.cfg.xml
<hibernate-configuration> <session-factory> <property name="hibernate.dialect"> org.hibernate.dialect.HSQLDialect </property> <property name="hibernate.connection.driver_class"> org.hsqldb.jdbcDriver </property> <property name="hibernate.connection.url"> jdbc:hsqldb:hsql://localhost:9090/dbc </property> <property name="hibernate.connection.username"> sa </property> <property name="hibernate.connection.password"> </property> Mapeamento das classes a serem persistidas </session-factory> </hibernate-configuration>
| 39
Classes Persistentes
Definio
So classes em uma aplicao que implementam as entidades persistentes do negcio. Hibernate funciona melhor com POJOS (Plain Old Java Objects)
De qualquer forma, Hibernate 3 restringe muito pouco da natureza dos objetos persistentes
| 41
Exemplo
public class Cliente { private String cpf; private String nome; private Endereco endereco; //Construtor vazio uma exigncia do hibernate public Cliente() { ... } //Porm outros contrutores podem ser definidos public Cliente(String newCpf, String newNome) { ... } ... }
| 42
| 43
| 44
Implementando Herana
Deve implementar gets e sets Deve implementar um construtor sem parmetros Herda a chave primria da classe pai
public class Conta extends ContaAbstrata { ... private Set transacoes; public Conta() { } public Set getTransacoes () { } public void setTransacoes (Set novasTransacoes) { } ... }
| 45
Mapeamento O/R
Mapeamento O/R
Pode ser descrito em documentos XML, porm essa prtica est caindo em desuso. Atualmente recomendado usar Annotations para mapear as classes. O mapeamento em torno de classes persistentes, ao invs de tabelas
| 47
| 48
| 49
| 50
Configurando a SessionFactory
Carregar o arquivo de configurao hibernate.cfg.xml e criar a Factory
//Cria uma nova configurao AnnotationConfiguration acfg = new AnnotationConfiguration(); //Carrega a configurao do hibernate.cfg.xml se ele existir acfg.configure(); //Cria a SessionFactory que prover todas as sessions necessrias SessionFactory sessionFactory = acfg.buildSessionFactory();
| 51
| 52
Salvando um cliente
//Cria uma nova configurao
acfg.configure();
//Cria a SessionFactory que prover todas as sessions necessrias
//Cria-se um objeto cliente local Cliente cliente = new Cliente(12332134598,Teste de insero); //Salva o objeto cliente no banco (Sem a sujeira do SQL embutido) session.save(cliente); //Fecha-se a sesso aps o uso session.close();
| 53
Atualizando um cliente
...
//Recupera o cliente do banco Cliente cliente = (Cliente) session.get( Cliente.class, cpf ); //Altera uma propriedade Cliente.setNome(Nome Alterado); //Atualiza o objeto cliente no banco session.saveOrUpdate(cliente); //Fecha-se a sesso aps o uso session.close();
| 54
Removendo um cliente
...
//Recupera o cliente do banco Cliente cliente = (Cliente) session.get( Cliente.class, cpf ); //Atualiza o objeto cliente no banco session.delete(cliente); //Fecha-se a sesso aps o uso session.close();
| 55
//Recupera todos os clientes do banco (VIA HQL) Query q = session.createQuery( from Cliente ); //Recupera a lista gerada pela consulta List<Cliente> clientes = q.list(); //Exibe os clientes for (Cliente c : clientes){ System.out.print( " Nome: " +c.getNome() ); System.out.println( " CPF: " +c.getCpf() ); } //Fecha-se a sesso aps o uso session.close();
| 56
@Id
Existem vrias formas de se definir um Id de objeto/registro
| 58
Relacionamentos
Com o Hibernate possvel mapear os trs tipos de relacionamentos dos banco de dados relacionais:
1:N ou N:1 - @OneToMany ou @ManyToOne N:N @ManyToMany 1:1 - @OneToOne
O Hibernate s faz uma exigncia quanto aos relacionamentos, os dois lados devem definir as regras de acesso.
| 60
Um para Um 1:1
| 61
Um para Um 1:1
@Entity @Table (name =tb_cliente) public class Cliente { @Id @Column ( name=cpf) private String cpf; @Column ( name=nome") private String nome; @OneToOne( cascade=CascadeType.ALL ) @PrimaryKeyJoinColumn private Endereco endereco; }
| 62
@Entity @Table (name =tb_endereco) public class Endereco { @Id @Column ( name=tb_cliente_cpf ) private String clienteCpf; @Column ( name=CEP") private String CEP; }
Um para N 1:N
| 63
Um para N 1:N
@Entity @Table (name =tb_cliente) public class Cliente { @OneToMany( mappedBy= cliente, fetch = FetchType.LAZY ) private Collection contas; } } ... @ManyToOne( fetch = FetchType.EAGER ) @JoinColumn( name= tb_cliente_cpf ) private Cliente cliente; @Entity @Table( name="tb_conta" ) public abstract class ContaAbstrata { ...
| 64
Case Insensitivity
Palavras chave HQL SELECT == select
| 65
Clusula from
frombanco.Agencia Agencia tabela [alias] FROM frombanco.Agencia AS Agencia FROM tabela [as] [alias]
FROM banco.Agencia, contaBancaria.Conta Podem ser usadas vrias classes
| 66
Clusula select
Indica que objetos e propriedades sero retornados
SELECT Agencia FROM .contaBancaria.ContaCorrente
Pode retornar vrios objetos e/ou propriedades Cliente FROM SELECT Agencia,
.contaBancaria.ContaCorrente
| 67
Funes Agregadas
Queries em HQL podem retornar o valor de funes agregadas
SELECT count(Conta.Cartoes) FROM .contaBancaria.ContaCorrente as Conta
As funes suportadas:
avg (...) sum(...) min(...) max(...) count(*) count( ), count (distinct ...), count (all ...)
| 68
Clusula where
Usada para diminuir o nmero de instncias retornadas
FROM .contaBancaria.ContaCorrente AS Conta WHERE Conta.numero = 1111111111 SELECT Poupanca FROM .contaBancaria.Poupanca AS Poupanca, .contaBancaria.ContaCorrente AS Conta WHERE poupanca.contaCorrente.numero = Conta.numero AND Conta.numero = 1111111111 FROM .contaBancaria.Conta AS conta WHERE conta.class = .contaBancaria.ContaCorrente
| 69
Expresses
Expresses que podem ser usadas na clusula where
Operadores Matemticos: +, -, *, / Comparadores Binrios: =, >=, <=, <, >, !=, like Operadores Lgicos: and, or, not Concatenao de Strings: || Funes escalares SQL: upper(), lower() Parnteses para agrupamento: () in, between, is null Parmetros JDBC ? Literais SQL: dbc, 69 Constantes Java public static final: .transacao.DOC.TipoContaCorrente
| 70
Java I/O
A classe File
| 72