O documento descreve o framework Hibernate, que mapeia objetos Java para tabelas de banco de dados. Hibernate permite o acesso a dados persistentes através de objetos Java simples, sem necessidade de escrever código SQL complexo. Ele suporta diversos bancos de dados e possui arquitetura baseada em sessões e transações. Hibernate também pode ser configurado através de anotações ou arquivos XML.
2. JDBC – Definição
Java Database Connectivity é um conjunto de classes e interfaces
(API) escritas em Java que fazem o envio de instruções SQL para
qualquer banco de dados relacional.
Serve para estabelecer conexões, executar consultas, obter
informações sobre o banco de dados, tabelas e gerenciar transações.
Para acessar o BD é necessário um driver fornecido pelo
desenvolvedor do SGBD que deseja utilizar.
O driver é um arquivo .jar, que deve ser escolhido de acordo com qual
String de conexão você utilizar e deve te-lo em seu classpath.
4. Hibernate - Definição
Criado por Gavin King 2001
O Hibernate é um framework de persistência para o mapeamento
objeto-relacional (ORM) escrito na linguagem Java.
• Suporte: DB2 AS/400, PostgreSQL, Microsoft SQL Server 2000,
Microsoft SQL Server 2005, Microsoft SQL Server 2008, SAP DB,
HypersonicSQL, H2 Database, Progress, Mckoi SQL, Interbase,
FrontBase, Firebird, entre outros.
5. Hibernate
• Após o sucesso do Hibernate, a especificação JPA (Java Persistence
API) foi criada com o objetivo de padronizar as ferramentas ORM
para aplicações Java e consequentemente diminuir a complexidade
do desenvolvimento.
6. Hibernate
• É framework de open source útil para mapear os objetos no Java
com as tabelas com eficiência.
• Leitura e escrita de objetos em suporte persistente no contexto de
uma unidade de trabalho.
• Uma unidade de trabalho regista todas as operações de uma
transação de negócio que podem afetar a base de dados. Quando
uma unidade de trabalho termina com sucesso, as operações
registadas são propagadas para a base de dados. Se a unidade de
trabalho abortou, todas as operações registadas são descartadas,
como se a unidade de trabalho nunca tivesse existido.
7. Hibernate - Funcionamento
Application
POJOs
Hibernate.cfg.xml
JDBC
Database
Object Mapping xml
Session Factory
Session
Hibernate faz uso de objetos
persistentes: POJO ( Plain Old Java
Objects ).
As instâncias desta interface são leves
e são baratas para criar e destruir.
As sessões são thread-safe e permite
a criação de objetos de consulta para
recuperar objetos persistentes.
Ele também permite a conection-
factory para transações e cache
obrigatória de objetos persistentes ,
usado quando se navega pelo
identificador .
8. Hibernate – POJO (Estados possíveis de instâncias )
• transiente (transient) - é um objeto instanciado pela aplicação, que não
está, nem nunca esteve, associado a uma unidade de trabalho. Os seus
dados não estão armazenados de forma persistente.
• persistente (persistent) - quando tem uma identidade persistente
associada e os seus dados estão (ou serão) armazenados de forma
persistente. Está associado a uma única unidade de trabalho, garantindo-
se que, para essa unidade de trabalho.
• destacado (detached) - é um objeto que já esteve associado a uma
unidade de trabalho, mas a associação já não existe (a unidade de
trabalho terminou ou o objeto foi explicitamente destacado).
10. Hibernate – Componentes da Arquitetura
• Hibernate SessionFactory: A instância do SessionFactory é usado para obter o
objeto de sessão. SessionFactory é “thread-safe” e cada objeto de sessão é
criado numa thread diferente. A instância do SessionFactory é imutável
• Hibernate Session: A interface Session fornece a API para aplicações Java para
interagir com o banco de dados. Através desta interface o desenvolvedor pode
escrever o código para operação de CRUD .
• Hibernate Transaction: É usado para manter a transação. Baseado na
configuração pode usar o componente de gerenciamento de transação do
Hibernate ou JTA. E fornece a API para a gestão eficiente das transações.
• Hibernate Query Language: O Hibernate Query Language também é conhecido
como HQL é como simples SQL , mas opera na classe POJO.
• Hibernate Criteria: Query Criteria é usado para consultar o banco de dados
baseado em conjunto de critérios.
11. Hibernate - Implantação
• Todas as classes Java que serão persistidas precisam de um
construtor padrão.
• Todas as classes devem conter uma identificação, a fim de permitir
a fácil identificação de seus objetos dentro de Hibernate e banco de
dados. Esta propriedade mapeia para a coluna de chave primária de
uma tabela de banco de dados .
• Todos os atributos que serão persistido deve ser declarado privada
e ter métodos getXXX e setXXX definido no estilo JavaBean.
12. Hibernate - Implantação
• Public class User{
• private long id;
• private String name;
• public User(){
• }
• //geters e seters
• }
13. Hibernate - Implantação
Database Connection : Isso é tratado por meio de um ou mais
arquivos de configuração suportados pelo Hibernate . Esses arquivos
são hibernate.properties (“old style”) ou hibernate.cfg.xml (Session)
ou persistence.xml (EntityManage).
Configuração de Mapeamento de Classe
Este componente cria a conexão entre as classes Java e tabelas de
banco de dados. Arquivos <classname>.Hbm.xml ou anotações.
14. hibernate.cfg.xml
• É nesse arquivo que configuramos:
• hibernate.connection.username: usuário do banco de dados
• hibernate.connection.password: senha do usuário
• hibernate.connection.url: chamada de URL ou string de conexão, deve
ser configurada de acordo com documentação do banco de dados
• hibernate.connection.driver_class: driver que deve ser utilizado
• hibernate.hbm2ddl.auto: indica como o hibernate vai se comportar em
relação às tabelas do banco.
• hibernate.dialect: dialeto a ser utilizado para a comunicação com o
banco de dados
• show_sql – flag: indica se os SQLs gerados devem ser impressos
• format_sql – flag: indica se os SQLs devem ser formatados
• Entre outros...pool_size, autocommit, etc.
15. Hibernate – Mapping
• Os elementos <class> são usados para definir os mapeamentos
específicos de uma classes Java para tabelas de banco de dados;
• O elemento <meta> é elemento opcional e pode ser usado para criar a
descrição da classe;
• O elemento <id> mapeia o atributo ID único na classe para a chave
primária da tabela de banco de dados;
• O elemento <generator> dentro do elemento id é usado para gerar
automaticamente os valores de chave primária.
• O elemento <property> é usado para mapear uma propriedade de classe
Java para uma coluna na tabela do banco de dados.
16. Hibernate - Anotações
• @Entity - identificar uma classe como persistente
• @Table - associa a classe persistente a uma tabela com nome definido
• @Id - identificador da classe (chave primária da tabela)
• @GeneratedValue - Define mecanismo para gerar a chave primária. –
GenerationType define a estratégia de geração.
• Todos os atributos não static e não transientes de um objeto persistente
são por omissão persistentes
• @Column – Informa o nome da coluna mapeada para o atributo, se ela
pode ser nula ou única.
17. Hibernate - Anotações
• @Enumerated – Representação explicíta de um Enum;
• @Temporal – Usada para mapear datas e/ou horas.
• @Lob – Utilizado para atributos que armazenam textos muito
grandes;
• @Transient – Serve para indicar um atributo que não deve ser
persistido;
•
18. Hibernate - Mapear associações entre classes
persistentes
• @Entity
• @Table(name=“usuario_sistema”)
• public class User{
• @Id
• private Long id;
• @OneToMany
• @JoinTable(
• name = “Perfis",
• joinColumns = @JoinColumn(name = “perfilCode"),
• inverseJoinColumns = @JoinColumn(name = “userRef")
• )
• private Set<Perfil> perfis; ... }
19. Hibernate - Mapear associações entre classes
persistentes
• CREATE TABLE User (
• id BIGINT NOT NULL PRIMARY KEY, ... );
• CREATE TABLE Perfis (
• perfilCode BIGINT NOT NULL REFERENCES Perfil(id),
• userRef BIGINT NOT NULL UNIQUE REFERENCES User(id)
• PRIMARY KEY (airlineCode, planeNumber), );
22. Hibernate - Vantagens
• Hibernate suporta a herança, Associações, Coleções;
• Hibernate suporta relacionamentos como um-para- muitos, um -
para-um , muitos-para- muitos-para -muitos, muitos -para-um;
• Integração com vários tipos de SGBDs;
• HQL contém comandos independentes de banco de dados;
• O Hibernate suporta mecanismo de cache por isso, o número de
viagens entre um aplicativo e o banco de dados é reduzido, usando
esta técnica de armazenamento em cache um desempenho de
aplicativos serão automaticamente aumentados;
23. Hibernate – Desvantagens
• ...
• Muita API para aprender: Uma grande quantidade de esforço é
necessário para aprender Hibernate. Então, não é muito fácil de
aprender hibernate facilmente.
Depuração: Às vezes a depuração e ajuste de desempenho torna-se
difícil.
Mais lento do que JDBC: Hibernate é mais lento que o JDBC puro
como ele está gerando muitas instruções SQL em tempo de
execução.
24. Hibernate - Concorrentes
• Enterprise JavaBeans Entity Beans
• Java Data Objects
• Castor
• TopLink
• Spring DAO
• Hibernate
• …