Hibernate Bruno Dadalt Zambiazi Gabriel Boff   Raniéri Geroldi Programação para Internet Centro Universitário UNIVATES
Hibernate Framework de mapeamento objeto-relacional (MOR);  Criado por Gavin King, em 2001, após aposta deste com seu chefe;  Escrito em Java e inicialmente feito somente para essa linguagem, hoje possui versão para .NET (NHibernate);  Atualmente, encontra-se na versão 3.3.2;  Site:  http://www.hibernate.org .
Mapeamento Objeto-Relacional (MOR/ORM)   Técnica de desenvolvimento para representar tabelas do banco de dados através de classes;  Cada registro da tabela é representado através de uma instância da classe;  Para mapear as classes, são utilizadas configurações em arquivos XML ou JPA;
Principais Características do Hibernate   Visa diminuir a complexidade no tratamento dos dados provenientes de um banco;  Torna o programa portável, deixando-o independente do banco de dados;  Mapeamento de classes através de XML ou JPA;  Gera automaticamente todo o schema do banco de dados;  Pode ser utilizado em um servidor de aplicações ou standalone.
Arquitetura A arquitetura do Hibernate é formada basicamente por um conjunto de interfaces; Relação das Interfaces: Execução, operações de criação, remoção, consulta e atualização no banco de dados:  Session , Transaction e Query ; Para configuração do Hibernate:  Configuration ; Interação entre os eventos do Hibernate e a aplicação:  Interceptor, Lifecycle, Validatable ; Extensão das funcionalidades de mapeamento do Hibernate: UserType , CompositeUserType, IdentifierGenerator .
Arquitetura Session O objeto  Session  é aquele que possibilita a comunicação entre a aplicação e a persistência, através de uma conexão JDBC. É um objeto leve de ser criado, não deve ter tempo de vida por toda a aplicação e não é  threadsafe . Um objeto  Session  possui um  cache  local de objetos recuperados na sessão, com o qual é possível criar, remover, atualizar e recuperar objetos persistentes. SessionFactory O objeto  SessionFactory, também denominado de fábrica de objetos Session,  é aquele que mantém o mapeamento objeto-relacional em memória. Permite a criação de objetos  Session , a partir dos quais os dados são acessados. Um objeto  SessionFactory  é  threadsafe , porém, deve existir apenas uma instância dele na aplicação pois é um objeto muito pesado. Configuration Um objeto Configuration é utilizado para realizar as configurações de inicialização do Hibernate. Com ele, define-se diversas configurações do Hibernate, como, por exemplo, o driver do banco de dados a ser utilizado, o dialeto, o usuário e senha do banco, entre outras. É a partir de uma instância desse objeto que se indica como os mapeamentos entre classes e tabelas de banco de dados devem ser feitos.
Arquitetura Transaction A interface  Transaction  é utilizada para representar uma unidade indivisível de uma operação de manipulação de dados. O uso dessa interface em aplicações que usam Hibernate é opcional. Essa interface abstrai a aplicação dos detalhes das transações JDBC, JTA ou CORBA. Criteria  e  Query As interfaces  Criteria  e  Query  são utilizadas para realizar consultas ao banco de dados.
Funcionamento O Hibernate configura-se como uma camada entre a aplicação e o banco de dados;   Uma classe Java é mapeada no Hibernate como uma tabela no banco; Cada instância dessa classe corresponde a um registro da tabela alocado na memória;   O Hibernate define estes três tipos de estados: Objetos Transients : são objetos criados através do operador “new” e que não estão associados a uma sessão do Hibernate. São destruídos pelo GC se não forem utilizados na aplicação;  Objetos Persistents : são objetos cujas instâncias estão associadas a um contexto persistente, ou seja, têm uma identidade no banco de dados;
Funcionamento Objetos Detached :  são objetos que tiveram suas instâncias associadas a um contexto persistente, mas que, por algum motivo, deixaram de ser associadas a mesma, por exemplo, por fechamento de sessão, finalização de sessão. São objetos em um estado intermediário, não sendo transientes e nem persistentes.
Funcionamento
Vantagens/Desvantagens Escrever menos código de persistência na aplicação; Suporte para vários tipos de bancos de dados relacionais; Uma vez feito o mapeamento, permite alterar o banco de dados sem ter que alterar a aplicação; Possível perda de desempenho.
Outros Recursos   Suporte a mais de 20 SGBD's; Hibernate Query Language (HQL);  Criteria;  Interceptadores;  Cascateamento de operações;  Avançado sistema de cache de dois níveis;  Hibernate Validator;  Log.
HQL - Exemplo Session session = DAO.getSession(). GrupoProduto grpr = session.load( GrupoProduto.class, 10 ); session.createQuery( “ SELECT prod FROM Produto prod WHERE prod.grupo = :grupo OR LOWER( prod.nome ) = LOWER( :nome )” ) .setEntity( “grupo”, grpr ) .setString( “nome”, “Bicicleta” );
Criteria - Exemplo DAO.getSession().createCriteria( Produto.class, “prod” ).add( Restrictions.or(  Restrictions.eq( “prod.grupo.id”, 100 ), Restrictions.ilike( “prod.nome”, “Bicicleta” ) ) );
Outros Frameworks ORM   iBatis -  http://ibatis.apache.org   OJB -  http://db.apache.org/ojb   TopLink -  http://www.oracle.com/technology/products/ias/toplink   Propel (PHP) -  http://propel.phpdb.org   SQLObject (Python) -  http://www.sqlobject.org
Referências   http://www.hibernate.org   http://pt.wikipedia.org/wiki/Hibernate   http://pt.wikipedia.org/wiki/Mapeamento_objeto-relacional   http://www.devmedia.com.br/articles/viewcomp.asp?comp=4742 http://waltercunha.com/blog/wp/uploads/hibernate_resumo.pdf

Hibernate

  • 1.
    Hibernate Bruno DadaltZambiazi Gabriel Boff Raniéri Geroldi Programação para Internet Centro Universitário UNIVATES
  • 2.
    Hibernate Framework demapeamento objeto-relacional (MOR); Criado por Gavin King, em 2001, após aposta deste com seu chefe; Escrito em Java e inicialmente feito somente para essa linguagem, hoje possui versão para .NET (NHibernate); Atualmente, encontra-se na versão 3.3.2; Site: http://www.hibernate.org .
  • 3.
    Mapeamento Objeto-Relacional (MOR/ORM) Técnica de desenvolvimento para representar tabelas do banco de dados através de classes; Cada registro da tabela é representado através de uma instância da classe; Para mapear as classes, são utilizadas configurações em arquivos XML ou JPA;
  • 4.
    Principais Características doHibernate Visa diminuir a complexidade no tratamento dos dados provenientes de um banco; Torna o programa portável, deixando-o independente do banco de dados; Mapeamento de classes através de XML ou JPA; Gera automaticamente todo o schema do banco de dados; Pode ser utilizado em um servidor de aplicações ou standalone.
  • 5.
    Arquitetura A arquiteturado Hibernate é formada basicamente por um conjunto de interfaces; Relação das Interfaces: Execução, operações de criação, remoção, consulta e atualização no banco de dados: Session , Transaction e Query ; Para configuração do Hibernate: Configuration ; Interação entre os eventos do Hibernate e a aplicação: Interceptor, Lifecycle, Validatable ; Extensão das funcionalidades de mapeamento do Hibernate: UserType , CompositeUserType, IdentifierGenerator .
  • 6.
    Arquitetura Session Oobjeto Session é aquele que possibilita a comunicação entre a aplicação e a persistência, através de uma conexão JDBC. É um objeto leve de ser criado, não deve ter tempo de vida por toda a aplicação e não é threadsafe . Um objeto Session possui um cache local de objetos recuperados na sessão, com o qual é possível criar, remover, atualizar e recuperar objetos persistentes. SessionFactory O objeto SessionFactory, também denominado de fábrica de objetos Session, é aquele que mantém o mapeamento objeto-relacional em memória. Permite a criação de objetos Session , a partir dos quais os dados são acessados. Um objeto SessionFactory é threadsafe , porém, deve existir apenas uma instância dele na aplicação pois é um objeto muito pesado. Configuration Um objeto Configuration é utilizado para realizar as configurações de inicialização do Hibernate. Com ele, define-se diversas configurações do Hibernate, como, por exemplo, o driver do banco de dados a ser utilizado, o dialeto, o usuário e senha do banco, entre outras. É a partir de uma instância desse objeto que se indica como os mapeamentos entre classes e tabelas de banco de dados devem ser feitos.
  • 7.
    Arquitetura Transaction Ainterface Transaction é utilizada para representar uma unidade indivisível de uma operação de manipulação de dados. O uso dessa interface em aplicações que usam Hibernate é opcional. Essa interface abstrai a aplicação dos detalhes das transações JDBC, JTA ou CORBA. Criteria e Query As interfaces Criteria e Query são utilizadas para realizar consultas ao banco de dados.
  • 8.
    Funcionamento O Hibernateconfigura-se como uma camada entre a aplicação e o banco de dados; Uma classe Java é mapeada no Hibernate como uma tabela no banco; Cada instância dessa classe corresponde a um registro da tabela alocado na memória; O Hibernate define estes três tipos de estados: Objetos Transients : são objetos criados através do operador “new” e que não estão associados a uma sessão do Hibernate. São destruídos pelo GC se não forem utilizados na aplicação; Objetos Persistents : são objetos cujas instâncias estão associadas a um contexto persistente, ou seja, têm uma identidade no banco de dados;
  • 9.
    Funcionamento Objetos Detached: são objetos que tiveram suas instâncias associadas a um contexto persistente, mas que, por algum motivo, deixaram de ser associadas a mesma, por exemplo, por fechamento de sessão, finalização de sessão. São objetos em um estado intermediário, não sendo transientes e nem persistentes.
  • 10.
  • 11.
    Vantagens/Desvantagens Escrever menoscódigo de persistência na aplicação; Suporte para vários tipos de bancos de dados relacionais; Uma vez feito o mapeamento, permite alterar o banco de dados sem ter que alterar a aplicação; Possível perda de desempenho.
  • 12.
    Outros Recursos Suporte a mais de 20 SGBD's; Hibernate Query Language (HQL); Criteria; Interceptadores; Cascateamento de operações; Avançado sistema de cache de dois níveis; Hibernate Validator; Log.
  • 13.
    HQL - ExemploSession session = DAO.getSession(). GrupoProduto grpr = session.load( GrupoProduto.class, 10 ); session.createQuery( “ SELECT prod FROM Produto prod WHERE prod.grupo = :grupo OR LOWER( prod.nome ) = LOWER( :nome )” ) .setEntity( “grupo”, grpr ) .setString( “nome”, “Bicicleta” );
  • 14.
    Criteria - ExemploDAO.getSession().createCriteria( Produto.class, “prod” ).add( Restrictions.or( Restrictions.eq( “prod.grupo.id”, 100 ), Restrictions.ilike( “prod.nome”, “Bicicleta” ) ) );
  • 15.
    Outros Frameworks ORM iBatis - http://ibatis.apache.org OJB - http://db.apache.org/ojb TopLink - http://www.oracle.com/technology/products/ias/toplink Propel (PHP) - http://propel.phpdb.org SQLObject (Python) - http://www.sqlobject.org
  • 16.
    Referências http://www.hibernate.org http://pt.wikipedia.org/wiki/Hibernate http://pt.wikipedia.org/wiki/Mapeamento_objeto-relacional http://www.devmedia.com.br/articles/viewcomp.asp?comp=4742 http://waltercunha.com/blog/wp/uploads/hibernate_resumo.pdf