26 de ago. de 2007

O que é o hibernate ?





Hibernate. É bem simples entender pra que serve esse bicho: Mapeamento Objeto Relacional

Para os mais experientes falar que o Hibernate faz a "ponte" entre o conceito Relacional com o Orientado a Objetos é fácil. Mas tem bastante gente que não cosegue enxergar isso.


Agora veja da seguinte forma. Temos uma tabela, o exemplo clássico, "Pessoa"
Bom ai temos uma tablea com 3 colunas. Transformar isso em objeto é fácil.
Seria um objeto da seguinte forma: Difícil fazer o "Mapemaneto Objeto Relacional" ??

Agora imagine este relacionamento:
Por favor, ignore o fato de ter feito um ER em uma ferramento de UML... :D
Você consegue enxergar que uma pessoa tem um carro e um endereço?? E que este carro tem um modelo ?? Transformar issto em objeto ainda continua fácil.

Mas você já imaginou o código necessário para passar estes dados para objetos ?!

Veja:





















Muitos vão olhar o código e dizer "Isso não é difícil" ou "Isto eu faço!". Realmente não é nada de outro mundo.
Mas imagine um projeto grande, com mais de 800 entidades persistentes. Qualquer programador fiacaria louco !!!



Agora veja o mesmo código com Hibernate:













O quê?! É isso mesmo ??? Sim!!

Claro, tem uma pequena parte que não esta neste código. A configuração do hibernate. Mas as consultas são simples assim.

O que eu mostrei até aqui é uma parte do que o Hibernate faz, agora vou fazer um apêndice sobre JPA.


Java Persistence API - JPA

"Java Persistence API é a interface padrão para mapeamento objeto/relacional e gerenciamento de persistência da plataforma Java EE 5.0"

Bom, espero q agora o termo "mapeamento objeto relacional" seja claro para todo mundo.

JPA define um comportamento, um contrato, de como deve ser o mapeamento objeto relacional e o gerenciamento de persistência de objetos java. Veja bem:
define um contrato. A implementação pode ser feita por qualquer um.

Eu li no blog Beyond Click uma comparação perfeita. JPA está para persistência assim como JDBC está para conexão com banco de dados.

As mais famosas implementações JPA são Hibenate e TopLink, existem outras.


Voltando ao hibernate... algumas de suas funcionalidades:

Persistência transparente
Não é necessário executar os comandos SQL de Insert, Update e Delete. O hibernate executa os médoto "save(Object obj)" , "update(Object obj)" e "delete(Object obj)".
Ou seja, ele salva, atualiza ou deleta objetos.

Consulta Fácil
O hibernate possui uma lingugem própria de consulta, o HQL. Esta linguamgem é equivalente a um SQL orientado a objetos. Facilita muuuiiiiiiiiitttoooo as consultas de objetos.

Cache de objetos
O hibernate, se for configurado para isso, trabalha com Cache de objetos.
Se um usuário consultou os dados da pessoa ID 1 no banco. Essa consulta fica em memória. Caso outro usuário consulte os dados da pessoa ID 1 o hibernate retorna os valores do Cache, não realizando uma nova consulta na base.
O isso significa um ganho de desempenho para aplicações de grande porte.

Existem outras!!


Como ele faz isso??
Essa parte que é interessante. O hibernate faz um mapemaneto entre classes java e tabelas no banco de dados.

Veja:

Classe Pessoa















Arquivo de Configuração da classe Pessoa


Esse arquivo xml realiza o tal Mapeamento. É nesse arquivo que esta toda a informação do objeto que será persistido ( inserido no banco de dados).

Este arquivo esta nos dizendo que o objeto Pessoa será inserido na tabela Pessoa. Que o atributo nome, da classe pessoa, representa a coluna nome na tabela Pessoa, e assim por diante.

Esse arquivo XML existe para cada Entidade Persistente. Uma entidade persistente é um objeto que será inserido no banco de dados.


Estrutura do Hibernate
Abaixo está uma foto que tirei so site do hibernate de como é a sua estrutura.




Entity Manager
EntityManager também faz parte da JPA. Esse pacote contem implementações do gerencimaneto de persistência, ciclo de vida dos objetos, a Java Persistence Quary Language e as configurações.
É um JAR com classes que fazem isso escrito ai em cima....hehehe

Hibernate Core

Este o núcleo do hibernate. Imagine o Hibernate Core como o Java SE da paltaforma Java. São os recursos básicos do hibernate, utilzido pelas demais API's.

Hibernate Annotations
O hibernate, como qualquer outro framework para mapeamento objeto relacional, precisa de informarções (chamdados de "meta dados") para transformar tabelas relacionais de uma base de dados em
objetos.
Antes de lançar o Java 5.0, com o recurso de Annotations, esses "meta dados" eram informados em arquivos XML, com o Java 5.0, o XML foi substituído por "annotatinos". Que fazem o mesmo papel do XML, só que agora na prória Classe.
O Hibernate Annotations extende as Annotações padrão da JPA.


É bom saber que o hibernate com XML ainda é muito utilizado.



Espero que quem não conhecia o hibernate possa ter entendido o que o hibernate é.


No decorrer dos próximos argitos irei aprofundar alguns dos assutnos que escrevi aqui.


Abraço!

fui...

Hibernate - da teoria à prática

Dae gurizada!!

Bom, faz tempo que não paro para escrever algo de útil. Tenho um monte de "artigos rascunhos" no meu blog que nunca ternimo.

Hoje, domingo chuvoso, estava assintindo nada na tv e resolvi escrever uma série de artigos sobre o Hibernate, framework que sou apaixonado! E também sobre JPA.

Esse artigos irão abordar os seguintes tópicos:

  • O que é o hibernate ? Introdução ao objetivo do framework hibernate, conceito de mapeamento objeto-relacional e exemplos comparativos entre aplicações utilizando hibernate X JDBC "na mão".
  • Aplicação exemplo 1.Aplicação onde vamos criar relacionamentos simples (one-to-many) e criar algumas telas CRUD.
  • Aplicação exemplo 2. Aplicação onde serão realizadas consultas utilizando a API Criteria, Fetching Lazy ( consultas preguisosas) e relacionamentos many-to-many.
  • Aplicação exemplo 3. Aqui ja teremos um conceito básico e sólido sobre como utilizar o hibernate. Vamos trabalhar com consultas agregadas.

Acredito que para aprender deve-se sempre optar pela prática. Então resovli fazer artigos simples, mas com aplicações.

Espero que seja de ajuda para quem é iniciante.

No mais era isso..

Assim que o primeiro artigo estiver pronto, será liberado.

fui!


20 de abr. de 2007

Certificação "opensource", por que não?








Esses dias me organizando ( contando os $$ ) para certificação, me surgiu uma dúvida. Por que não pode existir uma Certificação "OpenSource"? Não sei se OpenSource é o termo mais adequado, mas acho que representa bem a idéia.

Por que não existe uma Certificação onde a Comunidade de desenvolvedores, analistas, etc.. resolvem o que ser avaliado ??
Já param pra imaginar quantas pessoas com talento, caráter e sem R$ ou sem interesse existem por ai ?

Ou melhor, se você que está lendo isso já fez alguma seleção para alguma vaga. Já pegou alguém certificado que não teinha o seu perfil ??

Isso não é uma crítica às certificações Java. Acho as certificações ótimas! Realmente quem passa não pode se dizer leigo no assunto. E se não for isso que queira avaliar num desenvolvedor ?

A certificação java foca em "atividades críticas no desenvolvimento e arquitetura de aplicações". Mas e o resto ?

Imaginem uma empresa que não se preocupa se ">>" vai deslocar bit para esquerda ou para direita, não utiliza EJB e o interesse é avaliar aqualidade do trabalho (boas práticas) , por exemplo.

Do ponto de vista desta empresa é interessante:
  • Avaliar quanto o indivíduo conhece Spring, Hibernate, Struts, JSF, Ajax, JUnit, Lazlo ou qualquer outro "treco" que eu utilize no projeto.
  • Avaliar se ele utiliza boas práticas no desenvolvimento.
  • Até avaliar se o cara utiliza de forma coerente Exceptions..

Isso existe ?


Imaginem só, quanto mais facilitado o acesso às certificações melhor seria a visão
de todos perante o mercado de trabalho.

Dois pontos de vista diferentes:

Desempregado:
- Para mim me candidatar a vaga X precisor passar por o teste A, B e o C. Bom eu tenho uma meta!!

Empresa:
- Para esta vaga, no mínimo o indivíduo tem que passar pelo teste X, Y e o Z.


Resumindo. A Certificação "OpenSource" seria criada não pelo "criador", mas sim por pessoas (lógico com uma certa experiência e qualificação), que no dia-a-dia convivem com Desenvolvedores de todos os níveis.

O que vocês acham ?? Vai ou não vai ??


14 de abr. de 2007

Ler e gravar arquivos em java

Parece besta, mas já vi algumas pessoas com dúvidas..

Existem diversas formas em java para ler e gravar arquivos. Vou mostrar uma que me parece a mais simples.

Tando para ler ou gravar são utilizados 3 objetos.

- File
- Writer ou Reader
- Objeto para controlar o buffer

Gravar um arquivo:







Ler um arquivo:




Tae uma forma bem simples para trabalhar com arquivos...

Abraço!

13 de abr. de 2007

Ordenar objetos em Java








Hoje tive que ordenar objetos de uma Collection. Essa coleção era resultado de uma consulta muito louca usando a api Criteria do Hibernate, por isso não consegui utilizar um simples ORDER BY.


Para resolver meu problema utilizei as API's
Commons Collection e BeanUtil do Jakarta.

O código ficou assim:


List<BeanComparator> sortFields = new ArrayList();
sortFields.add(new BeanComparator("semestre"));
sortFields.add(new BeanComparator("nome"));

ComparatorChain multiSort = new ComparatorChain(sortFields);
java.util.Collections.sort(disciplinas,multiSort);

Tirei o exemplo do Porta JavaFree, só não achei o link mais

Este código é bem simples.

Primeiro criei uma list de BeanComparator. BeanComparator é utilizado em conjunto pela classe ComparatorChain para ordenar uma list por vários campos. Nome meu caso nome e semestre.

Era isso!