Sejam bem vindos, esta é a décima quinta aula de Programação Web em Java, para saber mais sobre o curso, começe em Curso de Programação Web em Java – CPWJ
Vamos construir uma aplicação de verdade usando Java e Web e o modelo MVC. Já sabemos lidar com java, xhtml e css e um pouco de teoria sobre o MVC. Vamos colocar tudo pra funcionar?
Definindo o que será nosso primeiro programa: um sistema de busca. Vamos começar com um formulário simples com uma caixa de texto e um botão buscar, que quando clicado leva a outra página com a lista de sites com a palavra chave procurada.
Eu prometi que o conteúdo seria apresentado com o banco de dados mysql, porém tive uma seqüência de problemas com o hibernate mais mysql. Não quiz perder tempo com os detalhes. Eu não trabalho com o mysql, mas com o Oracle. Acredito que vocês possam encontrar material sobre o uso do mysql e hibernate, porém eu estou com pressa para publicar logo este material e como tenho experiência com Oracle é com ele mesmo que vou continuar. A forma de trabalho é a mesma, mudando apenas o xml de conexão com o banco.
Para uso do Oracle faça o download do Oracle 10g Express Edition em http://www.oracle.com/technology/software/products/database/index.html. É uma versão limitada mas de uso gratuíto. (Debian, Mandriva, Novell, Red Hat, Ubuntu e Windows compatíveis conforme o site Oracle).
Após o processo de instalação crie um usuário “sbusca” com senha “suasenha”.
É só o que você precisa na parte do banco de dados, o restante ficará por conta do Hibernate.
Para a configuração do ambiente do Netbeans 6.0, você precisa das seguintes arquivos de biblioteca:
- para conectar no banco:
- classes12.jar
- para o Hibernate:
- ant-antlr-1.6.5.jar
- asm-attrs.jar
- asm.jar
- cglib-2.1.3.jar
- commons-collections-2.1.1.jar
- commons-logging-1.0.4.jar
- dom4j-1.6.1.jar
- ehcache-1.2.3.jar
- hibernate3.jar
- jta.jar
O classes12.jar você encontra aqui mesmo:jdbc Oracle. As bibliotecas do Hibernate você encontra no site do Hibernate em http://www.hibernate.org/6.html. A opção de download do Core é suficiente. (hibernate3.jar está na raiz do zip e os outros no diretório lib)
Reserve os arquivos indicados acima, somente eles, em um diretório qualquer de sua máquina.
Abra agora o Netbeans e vamos começar a fazer a mágica. Após o processo de carga escolha o opção File/New Project…
Escolha a Categoria Web e o tipo de projeto Web Application conforme a figura abaixo:
![]()
Clique em Next e digite o nome do projeto e se quiser escolha outra localização para a pasta do projeto. O restante pode deixar como indicado na tela:
![]()
Clique em Next e ative a biblioteca do Struts conforme a figura:
![]()
Clicando em Finish o projeto estará criado.
Vamos instalar as bibliotecas hibernate e do oracle para uso no nosso projeto. Na aba Projects use o botão direito sobre o nome do projeto (sbusca) e clique em properties. Na janela “Project Properties – sbusca” clique em libraries nas Categorias e no botão “Add JAR/Folder”. Selecione todos os arquivos do diretório que você colocou os arquivos jar e confirme clicando em “OK”.
Criado o projeto e definido as bibliotecas que vamos utilizar, o próximo passo é o Hibernate. Esta biblioteca auxilia no acesso ao Banco de Dados. Implementa a persistência aos objetos, fazendo a ponte objeto/relacional.
Vamos configurar o Hibernate para conexão com o Oracle. Para isso vamos escrever um arquivo de configuração XML. Clique com o botão direito do mouse sobre “Source Package” na aba do projeto e escolha a opção “New/ XML Document”. Digite o nome do arquivo como “hibernate.cfg.xml” (xml é automaticamente preenchido digite somente hibernate.cfg). Clique em “Next” e “Finish”.
Digite ou copie o código de configuração da conexão com o Oracle: (sempre cuidado com as aspas em códigos fonte, o WordPress detona lembra-se?)
<?xml version='1.0' encoding='utf-8'?> <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"> <hibernate-configuration> <session-factory> <!-- Database connection settings --> <property name="connection.driver_class">oracle.jdbc.driver.OracleDriver</property> <property name="connection.url">jdbc:oracle:thin:@10.89.9.6:1521:orabkl</property> <property name="connection.username">SBUSCA</property> <property name="connection.password">suasenha</property> <!-- JDBC connection pool (use the built-in) --> <property name="connection.pool_size">1</property> <!-- SQL dialect --> <!--property name="dialect">org.hibernate.dialect.HSQLDialect</property--> <property name="dialect">org.hibernate.dialect.Oracle9Dialect</property> <!-- Enable Hibernate's automatic session context management --> <property name="current_session_context_class">thread</property> <!-- Disable the second-level cache --> <property name="cache.provider_class">org.hibernate.cache.NoCacheProvider</property> <!-- Echo all executed SQL to stdout --> <property name="show_sql">true</property> <!-- Drop and re-create the database schema on startup --> <!-- Depois que executar uma vez a classe de teste elimine a linha seguinte. Esta linha provoca a exclusão de todas as tabelas e recriação.--> <property name="hbm2ddl.auto">create</property> <mapping resource="sbusca/Sites.hbm.xml"/> </session-factory> </hibernate-configuration>
Para facilitar a codificação com o Hibernate vamos criar uma classe para a conexão e desconexão do banco de dados. Clique com o botão direito do mouse sobre “Source Package” na aba do projeto e escolha a opção “New\java class”. Chame a classe de “HibernateUtil” e defina o package como “util”:
Clique em finish e copie o código da classe:
package util;
import org.hibernate.*;
import org.hibernate.cfg.*;
public class HibernateUtil {
private static final SessionFactory sessionFactory;
static {
try {
// Create the SessionFactory from hibernate.cfg.xml
sessionFactory = new Configuration().configure().buildSessionFactory();
} catch (Throwable ex) {
// Make sure you log the exception, as it might be swallowed
System.err.println("Initial SessionFactory creation failed." + ex);
throw new ExceptionInInitializerError(ex);
}
}
public static SessionFactory getSessionFactory() {
return sessionFactory;
}
}
Com a biblioteca carregada e as configurações do hibernate certas, vamos codificar uma classe Sites para representar um dado persistente. Clique em File/New File e escolha Categoria “java” e “File Types” igual a “Java Class”:
Clique em “Next” e defina o nome da classe como Sites e o package como sbusca:
Clicando em “Finish” o Netbeans irá abrir a página com o código da Classe. Complete o código da classe criando os campos necessários:
package sbusca;
public class Sites {
private Long id;
private String nome;
private String url;
private String descricao;
private String keyword;
public Sites() {}
public Long getId() {
return id;
}
private void setId(Long id) {
this.id = id;
}
public String getNome() {
return nome;
}
public void setNome(String nome) {
this.nome = nome;
}
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
public String getDescricao() {
return descricao;
}
public void setDescricao(String descricao) {
this.descricao = descricao;
}
public String getKeyword() {
return keyword;
}
public void setKeyword(String keyword) {
this.keyword = keyword;
}
}
Para o funcionamento perfeito do Hibernate são necessários alguns detalhes:
- Um campo Id para ser usado como campo chave automático;
- Funções Get e Set públicos para manipulação dos dados privados;
Após a criação da classe é necessário definir um arquivo de mapeamento Hibernate. Com o botão direito do mouse sobre “sbusca” em destaque na figura, escolha a opção “new” e “others”.
![]()
Na janela “New File” escolha a categoria “XML” e “File Type” “Xml Document”. Clique em “Next” e defina o nome do arquivo como “Sites.hbm.xml” (a extensão xml é automaticamente inserida). Clique em “Next” e por fim em “Finish”. Copie o código abaixo para realizar a amarração:
<?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <hibernate-mapping> <class name="sbusca.Sites" table="SITES"> <id name="id" column="SITES_ID"> <generator class="native"/> </id> <property name="nome"/> <property name="url"/> <property name="descricao"/> <property name="keyword"/> </class> </hibernate-mapping>
Para verificar se tudo funcionou até aqui, vamos criar uma classe para ver se o hibernate está conseguindo criar os registros: (espero que já saiba como criar a classe depois de eu repetir mais de uma vez a seqüencia de teclas!)
package sbusca;
import org.hibernate.Session;
import util.HibernateUtil;
public class MaquinaDeBusca {
public static void main(String[] args) {
MaquinaDeBusca mgr = new MaquinaDeBusca();
mgr.createAndStoreEvent("Tecnoclasta","http://www.tecnoclasta.com","Detonanto Tecnologia","java, tecnologia, astronáutica, astronomia");
mgr.createAndStoreEvent("Uol Universo On-line","http://www.uol.com.br/","Universo On-line - O maior portal em língua portuguesa","portal, uol, sites, notícias");
mgr.createAndStoreEvent("Portal Terra","http://www.terra.com.br/","Qual a sua Terra","portal, terra, notícias, sites");
mgr.createAndStoreEvent("Folha de São Paulo","http://www.folha.uol.com.br/","O Jornal com Credibilidade","jornal, folha, notícias");
HibernateUtil.getSessionFactory().close();
}
private void createAndStoreEvent(String nome, String url, String descricao, String keyword) {
Session session = HibernateUtil.getSessionFactory().getCurrentSession();
session.beginTransaction();
Sites umSite = new Sites();
umSite.setNome(nome);
umSite.setDescricao(descricao);
umSite.setUrl(url);
umSite.setKeyword(keyword);
session.save(umSite);
session.getTransaction().commit();
}
}
Executando esta classe o NetBeans vai trabalhar um bocado, e no fim do processo tudo deverá funcionar. Veja você mesmo se foi criada a tabela e se os registros foram criados corretamente.
Observe que o hibernate elimina toda a necessidade de codificação em SQL. Isso facilita muito a manutenção e mesmo portar o sistema para um banco de dados diferente.
Um segundo teste do hibernate consiste em executar uma consulta. Mude a função main para esta, inclua uma nova função “buscaSites()” e execute a classe novamente:
public static void main(String[] args) {
MaquinaDeBusca mgr = new MaquinaDeBusca();
//String teste="store";
String teste = "list";
if (teste.equals("store")) {
mgr.createAndStoreEvent("Tecnoclasta", "http://www.tecnoclasta.com", "Detonanto Tecnologia", "java, tecnologia, astronáutica, astronomia");
mgr.createAndStoreEvent("Uol Universo On-line", "http://www.uol.com.br", "Universo On-line - O maior portal em língua portuguesa", "portal, uol, sites, notícias");
mgr.createAndStoreEvent("Portal Terra", "http://www.terra.com.br", "Qual a sua Terra", "portal, terra, notícias, sites");
mgr.createAndStoreEvent("Folha de São Paulo", "http://www.folha.uol.com.br", "O Jornal com Credibilidade", "jornal, folha, notícias");
} else if (teste.equals("list")) {
List sites = mgr.buscaSites("notícias");
for (int i = 0; i < sites.size(); i++) {
Sites umSite = (Sites) sites.get(i);
System.out.println("Site: " + umSite.getNome() +": " + umSite.getDescricao()+ ", Url:"+umSite.getUrl());
}
}
HibernateUtil.getSessionFactory().close();
} //fim da função main
public List buscaSites(String keyword) {
Session session = HibernateUtil.getSessionFactory().getCurrentSession();
session.beginTransaction();
List result = session.createQuery("from Sites where keyword like '"+ keyword+"'").list();
session.getTransaction().commit();
return result;
}
Dando certo será listado os sites da Uol, Terra e Folha.
Pensei em fazer isso em uma aula só, porém está ficando muito, muito longo. Então fica aqui a primeira parte do sistema de busca. Na próxima aula terminamos.
Dúvidas? vá para o fórum.


Oi!
Muito bom! Eu esteve esperando esta parte pacientemente. Vou provar com ums exemplos que tenho e os que você propoe.
A gente se vé ao fórum.
Nacho
PS: Sorry my portuguese. Você usa Mist?
Best desktop-theme ever!!! The fastest!
Tecnoclasta responde
Ok, nos veremos no forum então.
[...] Décima Quinta Aula: 19 de fevereiro | Oracle e Hibernate, fazendo uma busca [...]
Do ponto de vista do dba, qual a vantagem de se utilizar hibernate?
Do pondo de vista do Dba, acredito que temos até desvantagens, já que as consultas são geradas pelo framework, não sendo possível realizar otimizações nos códigos.
Ola …
Por que seu exemplo não fala de DataSource e outros exemplos da web sim ?
Oracle não precisa ?
Veja este exemplo de um PDF que tenho
java:comp/env/jdbc/datasourceHibernate
Obrigado
Jorge,
Utilizar DataSource é opcional. A ideia deste recurso é que a configuração da conexão seja registrada no Servidor Web, e uma referência seja feita na aplicação para esta conexão. É ótimo e recomendável, pois permite a mudança do servidor de banco de dados sem trocar nenhuma linha de código no programa.
Eu não utilizei no meu curso, por que a configuração do DataSource no Web Server depende do Web Server utilizado. Fiz a opção de evitar recursos que poderiam complicar a configuração do ambiente pelo aluno. Da forma que codifiquei, o sistema funciona independente da configuração do Web Server.