// 
//     Licensed to the Apache Software Foundation (ASF) under one
//     or more contributor license agreements.  See the NOTICE file
//     distributed with this work for additional information
//     regarding copyright ownership.  The ASF licenses this file
//     to you under the Apache License, Version 2.0 (the
//     "License"); you may not use this file except in compliance
//     with the License.  You may obtain a copy of the License at
// 
//       http://www.apache.org/licenses/LICENSE-2.0
// 
//     Unless required by applicable law or agreed to in writing,
//     software distributed under the License is distributed on an
//     "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
//     KIND, either express or implied.  See the License for the
//     specific language governing permissions and limitations
//     under the License.
//

= Criando uma Aplicação Swing do Maven utilizando o Hibernate: Tutorial do NetBeans IDE
:jbake-type: tutorial
:jbake-tags: tutorials 
:jbake-status: published
:icons: font
:syntax: true
:source-highlighter: pygments
:toc: left
:toc-title:
:description: Criando uma Aplicação Swing do Maven utilizando o Hibernate: Tutorial do NetBeans IDE - Apache NetBeans
:keywords: Apache NetBeans, Tutorials, Criando uma Aplicação Swing do Maven utilizando o Hibernate: Tutorial do NetBeans IDE

Neste tutorial, você utiliza o NetBeans IDE para criar uma aplicação Java Swing usando um arquétipo Maven. A aplicação usa o framework do Hibernate como camada de persistência para recuperar POJOs (objetos Java antigos e simples) de um banco de dados relacional. Este tutorial demonstra como os assistentes no IDE podem ajudar a criar os arquivos Hibernate necessários e adicionar dependências Hibernate no POM. Depois de criar objetos Java e configurar a aplicação usar o Hibernate, você cria uma interface GUI para a pesquisa e exibição dos dados.

O Suporte para Maven é totalmente integrado no Netbeans IDE; o Maven 3 está no mesmo pacote que o IDE. Você pode criar aplicações dos arquétipos Maven incorporados de arquétipos em repositórios remotos no assistente de Novo Projeto. O Browser de Repositório Maven permite explorar seus repositórios Maven locais e remotos, examinar artefatos e adicionar dependências de projeto ao POM do projeto.

Para construir esta aplicação utilizando o Ant, consulte link:hibernate-java-se.html[+Utilizando o Hibernate em um Aplicação Java Swing+].

Para construir uma aplicação Maven Java EE, consulte link:../javaee/maven-entapp.html[+Criando uma Aplicação Corporativa com o Maven+].


image::images/netbeans-stamp-80-74-73.png[title="O conteúdo desta página se aplica ao NetBeans IDE 7.2, 7.3, 7.4 e 8.0"]


*Para seguir este tutorial, são necessários os recursos e o software a seguir.*

|===
|Software ou Recurso |Versão Necessária 

|link:http://download.netbeans.org/[+NetBeans IDE+] |Pacote Java 7.2, 7.3, 7.4, 8.0 

|link:http://www.oracle.com/technetwork/java/javase/downloads/index.html[+JDK (Java Development Kit)+] |versão 7 ou 8 

|link:http://maven.apache.org/[+Maven+] |versão 2.09 ou posterior 

|link:http://www.mysql.com/[+Servidor de banco de dados MySQL+] |versão 5.x 

|Banco de Dados Sakila |plug-in disponível na central de atualização 
|===

Antes de começar este tutorial, talvez você queira se familiarizar com a documentação a seguir.

* Documentação do Hibernate em link:http://www.hibernate.org/[+hibernate.org+]
* Tutorial link:../ide/mysql.html[+Estabelecendo Conexão com um Banco de Dados MySQL+]

Você pode fazer download link:https://netbeans.org/projects/samples/downloads/download/Samples/Java/DVDStoreAdmin-Maven.zip[+de um arquivo compactado zip do projeto finalizado+].


== Criando o Banco de Dados

Este tutorial usa um banco de dados MySQL chamado  ``sakila`` . O banco de dados de amostra não é incluído quando você instala o IDE, portanto você precisa criar o banco de dados primeiro para seguir este tutorial.

O banco de dados Sakila é um banco de dados MySQL de amostra disponível no site do MySQL. Para criar o banco de dados sakila, você pode fazer o download e instalar o plug-in Banco de Dados de Amostra do Sakila usando o Gerenciador de plug-ins. Depois de instalar o plug-in, você pode criar o banco de dados sakila da janela Serviços. O banco de dados sakila é adicionado à lista de bancos de dados na caixa de diálogo Criar banco de dados MySQL.

Para obter mais informações sobre a configuração do IDE para trabalhar com o MySQL, consulte o tutorial link:../ide/mysql.html[+Estabelecendo Conexão com um Banco de Dados MySQL+].

1. Abra o Gerenciador de plug-ins e instale o plug-in Banco de Dados de Amostra do Sakila.
2. Depois de instalar o plug-in, inicie o servidor do banco de dados MySQL ampliando o nó Banco de dados na janela Serviços, clicando com o botão direito do mouse no nó Servidor MySQL e escolhendo Iniciar.
3. Clique com o botão direito do mouse no nó Servidor MySQL e escolha Criar Banco de Dados.
4. Selecione o banco de dados Sakila na lista drop-down Novo Nome de Banco de Dados, na caixa de diálogo Criar Banco de Dados MySQL. Clique em OK.
image::images/create-sakila-mysql.png[title="Tela da caixa de diálogo Criar Banco de Dados MySQL"]

Quando você clica em OK, o IDE executa um script para criar o banco de dados Sakila e preencher as tabelas do banco de dados. Você pode ver o resultado da execução do script na janela de Saída. É adicionado também um nó para o banco de dados Sakila sob o nó do Servidor MySQL.



. Clique com o botão direito do mouse no nó do Sakila e escolha Conectar.

Quando você clica em Conectar, um nó de conexão do banco de dados do banco de dados Sakila ( ``jdbc:mysql://localhost:3306/sakila [_nome de usuário_ em Default]`` ) será listado abaixo do nó Bancos de Dados. Quando uma conexão for aberta, você poderá exibir os dados no banco de dados ampliando o nó de conexão.


== Configurando o Maven

O Maven está integrado ao IDE e é instalado quando você instala o IDE. No entanto, se esse for seu primeiro projeto Maven, você precisará verificar as definições de configuração do Maven na janela Opções.

1. Abra a janela Opções no IDE (Ferramentas > Opções; NetBeans > Preferências no Mac).
2. Selecione a categoria Java na janela Opções e clique na guia Maven.
3. Confirme se um Início do Maven está especificado.

Você pode usar a versão do Maven incorporada no IDE ou especificar a localização de uma instalação local do Maven (requer versão 2.0.9 ou posterior).



. Clique em OK para fechar a janela Opções.

*Observações.*

* O suporte a Maven será automaticamente ativado quando o Java estiver ativado no IDE. Você precisará ativar o plug-in Java EE, se não estiver ativado.
* Em netbeans IDE 7.1 e versões anteriores do IDE, a guia Maven na janela Opções está localizada na categoria Diversos.


=== Exibindo os Repositórios Maven

Os artefatos que são utilizados pelo Maven para construir todos os projetos são armazenados em seu repositório local Maven. Quando um artefato é declarado como uma dependência do projeto, o artefato é submetido a download para seu repositório local usando um dos repositórios remotos registrados.

Por default, diversos repositórios Maven indexados bem conhecidos são registrados e listados no browser do repositório. Os repositórios registrados contêm a maioria dos artefatos públicos necessários para que você construa seu projeto. Na maioria dos casos, não é necessário registrar nenhum repositório adicional, a não ser que seu projeto necessite de artefatos encontrados somente em um repositório privado.

Você pode explorar seus repositórios Maven locais e remotos e executar uma verificação imediata para atualizações na janela Serviços. Qualquer artefato que esteja em seus repositórios locais ou remotos podem ser adicionados como uma dependência do projeto. Você pode expandir o nó do repositório Local na janela Serviços para ver os artefatos que estão presentes localmente. Os artefatos listados abaixo dos nós do repositório remoto podem ser adicionados como dependências do projeto, mas nem todos eles estão localmente presentes. Eles são adicionados ao repositório Local somente quando são declarados como dependências do projeto.

Para procurar e atualizar os repositórios Maven execute as etapas a seguir.

1. Escolha Janela > Serviços para abrir a janela Serviços.
2. Expandir o nó Repositórios Maven na janela Serviços para exibir os repositórios.
3. Expanda um nó de repositório para exibir os artefatos.
4. Clique com o botão direito em um nó do repositório e escolha Atualizar Índice no menu pop-up para atualizar o repositório.
image::images/maven-repositories.png[title="Repositórios Maven na janela Serviços"]

Quando seu cursor está sobre um artefato, o IDE exibe uma dica de ferramenta com as coordenadas do artefato. Você pode clicar duas vezes em um arquivo JAR do artefato para exibir os detalhes adicionais sobre o artefato.

Você pode procurar um artefato clicando com o botão direito no nó Repositórios Maven na janela Serviços e escolhendo Localizar.

Para saber mais sobre como gerenciar as dependências de classpath Maven e sobre como trabalhar com repositórios Maven no IDE, consulte a seção link:http://wiki.netbeans.org/MavenBestPractices#section-MavenBestPractices-DependencyManagement[+Gerenciamento de Dependência+] em link:http://wiki.netbeans.org/MavenBestPractices[+Práticas Recomendadas para o Apache Maven no NetBeans IDE+].

*Observações para NetBeans IDE 7.1 e versões anteriores do IDE.*

* Escolha Janela > Outros > Browser dos Repositórios Maven para exibir repositórios Maven.
* Você pode usar os botões na barra de ferramentas do Browser dos Repositórios do Maven para atualizar os índices e procurar artefatos.


== Criando a Aplicação Maven

Neste tutorial você cria um projeto da aplicação Java Swing simples chamado DVDStoreAdmin. O projeto será criado de um dos arquétipos Maven incorporados e, em seguida, as definições default do projeto serão modificadas.


=== Escolhendo um Arquétipo

O assistente Novo Projeto permite que você crie um projeto Maven de um arquétipo Maven. O IDE inclui diversos arquétipos para projetos NetBeans comuns, mas também é possível localizar e escolher arquétipos em repositórios remotos no assistente.

1. Selecione Arquivo > Novo Projeto (Ctrl-Shift-N; ⌘-Shift-N no Mac) no menu principal para abrir o assistente Novo Projeto.
2. Selecione Aplicação Java na categoria Maven. Clique em Próximo. 
image::images/maven-project-wizard.png[title="Arquétipos do Maven no assistente Novo Projeto"]


. Insira *DVDStoreAdmin* como nome do projeto e defina a sua localização.


. Modifique o ID de Grupo default e a Versão (opcional).

O ID de Grupo e a Versão serão utilizadas como as coordenadas para o artefato em seu repositório local quando o projeto for construído.



. Clique em Finalizar.

Quando você clicar em Finalizar, o IDE criará o projeto Maven e abrirá o projeto na janela Projetos. O IDE cria automaticamente a classe  ``App.java``  no pacote  ``com.mycompany.dvdstoreadmin`` . É possível deletar o  ``App.java``  porque ele não é necessário para a aplicação.

*Observação.* Se esta for a primeira vez que você está criando um projeto Maven, o Maven precisará fazer download de alguns plug-ins e artefatos necessários para o repositório local. Isso pode levar algum tempo.


=== Modificando as Propriedades do Projeto

Quando você cria um projeto Maven utilizando o assistente, as propriedades default do projeto têm base no arquétipo. Em alguns casos, poderá ser necessário modificar as propriedades default de acordo com os requisitos de seu sistema e do projeto. Por exemplo, para este projeto, você deseja garantir que o nível do código-fonte seja definido como 1.5 ou uma versão mais recente porque o projeto utiliza anotações.

1. Clique com o botão direito do mouse no nó do projeto e escolha Propriedades.
2. Selecione a categoria Códigos-fonte na janela Propriedades.
3. Confirmar que o Formato de Código-fonte/Binário é selecionado na lista drop-down é 1.5 ou uma versão mais recente.
4. Selecione UTF-8 na lista drop-down para a propriedade Codificação. Clique em OK.


== Adicionando Arquivos e Dependências Hibernate

Para adicionar o suporte para Hibernate, é necessário tornar disponíveis as bibliotecas do Hibernate ao declarar os artefatos necessários como dependências no POM. O IDE inclui assistentes para ajudá-lo a criar os arquivos Hibernate necessários em seu projeto. É possível usar os assistentes no IDE para criar um arquivo de configuração Hibernate e uma classe de ajuda do utilitário. Se criar o arquivo de configuração Hibernate utilizando um assistente, o IDE atualiza automaticamente o POM e as dependências Hibernate para o projeto.

É possível adicionar dependências ao projeto na janela Propriedades ou ao editar diretamente o  ``pom.xml`` . Para adicionar uma dependência na janela Projetos, clique com o botão direito do mouse no nó Dependências na janela Projetos e escolha Adicionar Dependência no menu pop-up para abrir a caixa de diálogo Adicionar Dependência. Quando uma dependência é adicionada, o IDE atualiza o POM e faz download de quaisquer artefatos necessários para o repositório local, que ainda não estão localmente presentes.

Para editar diretamente o  ``pom.xml`` , abra o arquivo ao expandir o nó Arquivos do Projeto na janela Projetos e clique duas vezes em  ``pom.xml`` .


=== Criando o Arquivo de Configuração do Hibernate

O arquivo de configuração Hibernate ( ``hibernate.cfg.xml`` ) contém informações sobre a conexão do banco de dados, os mapeamentos de recursos e outras propriedades da conexão. Ao criar um arquivo de configuração Hibernate usando um assistente, você especifica a conexão do banco de dados de uma lista de conexões de bancos de dados registradas no IDE. Durante a geração do arquivo de configuração, o IDE adiciona automaticamente os detalhes da conexão e as informações de dialeto com base na conexão de banco de dados selecionada. O IDE também modifica automaticamente o POM para adicionar as dependências Hibernate necessárias. Depois de criar o arquivo de configuração, você pode editar o arquivo usando o editor de múltipla exibição, ou editar o XML diretamente no editor XML.

1. Clique com o botão direito do mouse na conexão ao banco de dados Sakila na janela Serviços e escolha Conectar.
2. Clique com o botão direito do mouse no nó Pacotes de Código-fonte na janela Projetos e escolha Novo > Outro para abrir o assistente para Novo Arquivo.
3. Selecione o Assistente Configuração do Hibernate a partir da categoria Hibernate. Clique em Próximo.
4. Mantenha o nome default do arquivo ( ``hibernate.cfg`` ).
5. Clique em Procurar e especifique o diretório  ``src/main/resources``  como a Localização (se ainda não estiver especificada). Clique em Próximo.
6. Selecione a conexão sakila na lista drop-down Conexão do Banco de Dados. Clique em Finalizar.
image::images/hib-config.png[title="Caixa de diálogo para selecionar conexão de banco de dados"]

Quando você clicar em Finalizar o IDE abre  ``hibernate.cfg.xml``  no editor. O arquivo de configuração contém informações sobre um único banco de dados.

Se você expandir o nó Dependências na janela Projetos, é possível ver que o IDE adicionou os artefatos Hibernate necessários. O IDE lista todas as dependências diretas e transitivas necessárias para compilar o projeto no nó Dependências. Os artefatos que são dependências diretas (dependências que são especificadas no POM do projeto) são indicadas por ícones JAR coloridos. Um artefato é acinzentado se ele for uma dependência transitiva (um artefato que é uma dependência de uma ou mais dependências diretas).

image::images/maven-project-libs.png[title="Dependências no nó Bibliotecas na janela Projetos"]

É possível exibir os detalhes do artefato ao clicar com o botão direito do mouse em um JAR e ao escolher Exibir Detalhes do Artefato. O Visualizador de Artefato contém guias que fornecem detalhes sobre o artefato selecionado. Por exemplo, a guia Básico fornece detalhes sobre as coordenadas do artefato e as versões disponíveis. A guia Gráfico fornece uma representação visual das dependências do artefato selecionado.

image::images/maven-artifacts-viewer.png[title="A guia Gráficos ou o Visualizador do Artefato mostrando as dependências"]

Também é possível utilizar a guia Gráficos para descobrir e solucionar conflitos de versão entre dependências.


=== Modificando o Arquivo de Configuração do Hibernate

Neste exercício, você editará as propriedades default especificadas em  ``hibernate.cfg.xml``  para ativar o log de depuração para instruções SQL. Este exercício é opcional.

1. Abra  ``hibernate.cfg.xml``  na guia Desenho. Você pode abrir o arquivo expandindo o nó Arquivos de Configuração na janela Projetos e clicando duas vezes em  ``hibernate.cfg.xml`` .
2. Expanda o nó Propriedades da Configuração em Propriedades Opcionais.
3. Clique em Adicionar para abrir a caixa de diálogo Adicionar Propriedade do Hibernate.
4. Na caixa de diálogo, selecione a propriedade  ``hibernate.show_sql``  e defina o valor para  ``true`` . Clique em OK. Isso ativa o log de depuração das instruções SQL.
image::images/add-property-showsql.png[title="Caixa de diálogo Adicionar Propriedade Hibernate que mostra o valor de definição de hibernate.show_sql"]


. Clique em Adicionar no nó Propriedades Diversas e selecione  ``hibernate.query.factory_class``  na lista drop-down Nome da Propriedade.


. Digite *org.hibernate.hql.internal.classic.ClassicQueryTranslatorFactory* no campo de texto. Clique em OK.

*Observação.* Não selecione o valor na lista drop-down.

image::images/add-property-factoryclass-4.png[title="Caixa de diálogo Adicionar Propriedade Hibernate que mostra o valor de definição de hibernate.query.factory_class"]

Se clicar na guia XML no editor, você pode ver o arquivo na view XML. O arquivo deve ter uma aparência semelhante a esta:


[source,xml]
----

<hibernate-configuration>
    <session-factory name="session1">
        <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
        <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
        <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/sakila</property>
        <property name="hibernate.connection.username">root</property>
        <property name="hibernate.connection.password">######</property>
        <property name="hibernate.show_sql">true</property>
        <property name="hibernate.query.factory_class">org.hibernate.hql.internal.classic.ClassicQueryTranslatorFactory</property>
    </session-factory>
</hibernate-configuration>
----


. Salve as alterações feitas no arquivo.

Quando você executar seu projeto, poderá visualizar a consulta SQL impressa na janela de Saída do IDE.


=== Criando o Arquivo de Ajuda  ``HibernateUtil.java`` 

Para usar o Hibernate, é necessário criar uma classe de ajuda que lide com a inicialização e que acesse o  ``SessionFactory``  do Hibernate para obter um objeto de Sessão. A classe chama o método  ``configure()``  do Hibernate, carrega o arquivo de configuração  ``hibernate.cfg.xml``  e, em seguida, constrói o  ``SessionFactory``  para obter o objeto de Sessão.

Nesta seção, você usa o assistente para Novo Arquivo a fim de criar a classe helper  ``HibernateUtil.java`` .

1. Clique com o botão direito do mouse no nó dos Pacote de Códigos-fonte e selecione Novo > Outro para abrir o assistente para Novo Arquivo.
2. Selecione Hibernate na lista Categorias e HibernateUtil.java na lista Tipos de Arquivo. Clique em Próximo.
3. Insira *HibernateUtil* como nome da classe e *sakila.util* como nome do pacote. Clique em Finalizar.
image::images/maven-hibutil-wizard.png[title="Assistente Util. Hibernate"]

Quando você clicar em Finalizar, o  ``HibernateUtil.java``  será aberto no editor. Você pode fechar o arquivo porque não precisa editá-lo.


== Gerando Arquivos de Mapeamento Hibernate e Classes Java

Neste tutorial você usa um POJO (objeto Java antigo e simples), o  ``Actor.java`` , para representar os dados na tabela ACTOR do banco de dados. A classe especifica os campos para as colunas nas tabelas e usa setters e getters simples para recuperar e gravar dados. Para mapear o  ``Actor.java``  para a tabela ACTOR, você pode usar um arquivo de mapeamento do Hibernate ou usar anotações na classe.

Você pode usar o assistente Engenharia Reversa e os Arquivos de Mapeamento do Hibernate e POJOs obtidos de um assistente de banco de dados para criar múltiplos POJOs e arquivos de mapeamento com base nas tabelas selecionadas do banco de dados. Como alternativa, você pode usar assistentes no IDE para ajudar a criar POJOs individuais e arquivos de mapeamento a partir do rascunho.

*Observação.* Ao criar arquivos para múltiplas tabelas, você provavelmente desejará usar os assistentes. Neste tutorial, você só precisa criar um POJO e um arquivo de mapeamento, portanto, é muito mais fácil criar os arquivos individualmente. Você pode consultar as etapas para a <<10,criação dos POJOs e arquivos de mapeamento individualmente>> no final deste tutorial.


=== Criar Arquivo de Engenharia Reversa

Para utilizar os POJOs e os Arquivos de Mapeamento do Assistente do Banco de Dados, primeiro é preciso criar o arquivo de engenharia reversa  ``reveng.xml``  no diretório  ``src/main/resources`` , onde foi criado o  ``hibernate.cfg.xml`` .

1. Clique com o botão direito do mouse no nó dos Pacote de Códigos-fonte e selecione Novo > Outro para abrir o assistente para Novo Arquivo.
2. Selecione Hibernate na lista Categorias e o assistente Engenharia Reversa do Hibernate a partir da lista Tipos de Arquivos. Clique em Próximo.
3. Digite *hibernate.reveng* como o nome do arquivo.
4. Especifique * ``src/main/resources`` * como a Localização. Clique em Próximo.
5. Selecione *actor* no painel Tabelas Disponíveis e clique em Adicionar. Clique em Finalizar.

O assistente gera um arquivo de engenharia reversa  ``hibernate.reveng.xml`` . Você pode fechar o arquivo de engenharia reversa porque não precisará editar o arquivo.

*Observação.* Este projeto requer uma biblioteca jar do conector MySQL ( ``mysql-connector-jar-5.1.13.jar`` , por exemplo). Se um JAR adequado não estiver listado como dependência do projeto no nó Dependências, é possível adicionar a dependência clicando com o botão direito do mouse no nó Dependências e escolhendo Adicionar Dependência.


=== Criando Arquivos de Mapeamento Hibernate e POJOs de um Banco de Dados

Os Arquivos de Mapeamento do Hibernate e os POJOs obtidos de um Assistente de Banco de Dados geram arquivos com base em tabelas em um banco de dados. Quando você usa o assistente, o IDE gera POJOs e os arquivos de mapeamento com base nas tabelas do banco de dados especificadas em  ``hibernate.reveng.xml``  e, a seguir, adiciona as entradas do mapeamento no  ``hibernate.cfg.xml`` . Quando usa o assistente, você pode escolher os arquivos que deseja que o IDE gere (somente os POJOs, por exemplo) e selecionar as opções de geração de código (gerar código que use anotações EJB 3, por exemplo).

1. Clique com o botão direito do mouse no nó Pacotes de Código-fonte na janela Projetos e escolha Novo > Outro para abrir o assistente para Novo Arquivo.
2. Selecione Arquivos de Mapeamento do Hibernate e POJOs provenientes de um Banco de Dados na categoria Hibernate. Clique em Próximo.
3. Selecione  ``hibernate.cfg.xml``  na lista drop-down Arquivo de Configuração Hibernate, caso não esteja selecionado.
4. Selecione  ``hibernate.reveng.xml``  na lista drop-down Arquivo de Engenharia Reversa Hibernate, caso não esteja selecionado.
5. Certifique-se de que as opções *Código do Domínio* e *Mapeamentos XML do Hibernate* estejam selecionadas.
6. Insira *sakila.entity* para o nome do Pacote. Clique em Finalizar.
image::images/mapping-pojos-wizard.png[title="Gerar assistente Arquivos de Mapeamento Hibernar e POJOs"]

Quando você clica em Finalizar, o IDE gera o POJO  ``Actor.java``  com todos os campos necessários no diretório  ``src/main/java/sakila/entity`` . O IDE também gera o arquivo de mapeamento do Hibernate no diretório  ``src/main/resources/sakila/entity``  e, em seguida, adiciona a entrada do mapeamento em  ``hibernate.cfg.xml`` .

Agora que você tem o POJO e os arquivos necessários relacionados ao Hibernate, poderá criar um front-end simples de GUI Java para a aplicação. Você também poderá criar e adicionar uma consulta HQL que pesquise o banco de dados para recuperar os dados. Nesse processo, também usamos o editor HQL para construir e testar a consulta.


== Criando a GUI da Aplicação

Neste exercício, você criará um form JFrame simples com alguns campos para a entrada e exibição de dados. Você também adicionará um botão que irá disparar uma consulta do banco de dados para recuperar os dados.

Se você não estiver familiarizado com o uso do GUI Builder para criar forms, talvez queira examinar o tutorial link:gui-functionality.html[+Introdução à Construção de GUIs+].


=== Criando o Form JFrame

1. Clique com o botão direito do mouse no nó do projeto na janela Projetos e escolha Novo > Outro para abrir o assistente para Novo Arquivo.
2. Selecione Form JFrame na categoria Forms de GUI Swing. Clique em Próximo.
3. Digite *DVDStoreAdmin* como Nome da Classe e insira *sakila.ui* como Pacote. Clique em Finalizar.

Quando você clica em Finalizar, o IDE cria a classe e abre o form JFrame na view Design do editor.


=== Adicionando Elementos ao Form

Agora você precisa adicionar os elementos de UI ao form. Quando o form estiver aberto na view Design do editor, a paleta será mostrada no lado direito do IDE. Para adicionar um elemento ao form, arraste o elemento da Paleta para a área do form. Depois de adicionar um elemento ao form, será necessário modificar o valor default da propriedade Nome da variável desse elemento.

1. Arraste um elemento Label da Paleta e altere o texto para *ActorProfile*.
2. Arraste um elemento Label da Paleta e altere o texto para *First Name*.
3. Arraste um elemento Campo de Texto perto do label Nome e delete o texto default.

Quando o texto default for deletado, o campo de texto é será contraído. É possível redimensionar o campo de texto em outro momento ao ajustar o alinhamento dos elementos do form.



. Arraste um elemento Label da Paleta e altere o texto para *Sobrenome*.


. Arraste um elemento Campo de texto para perto do label Sobrenome e delete o texto default.


. Arraste um elemento de Botão da Paleta e altere o texto para *Consulta*.


. Arraste um elemento Tabela da Paleta para dentro do form.


. Modifique os valores do Nome da Variável dos seguintes elementos da UI de acordo com os valores na tabela a seguir.

Você pode modificar o valor do Nome da Variável de um elemento clicando com o botão direito do mouse no elemento na view Design e, em seguida, escolhendo Alterar Nome da Variável. De modo alternativo, você pode alterar o Nome da Variável diretamente na janela Inspetor.

Você não precisa designar os valores do Nome da Variável aos elementos do Label.

|===
|Elemento |Nome da Variável 

|Campo de texto Nome | ``firstNameTextField``  

|campo de texto Sobrenome | ``lastNameTextField``  

|Botão Consulta | ``queryButton``  

|Tabela | ``resultTable``  
|===


. Redimensione os campos de texto e alinhe os elementos do form.

É possível ativar a propriedade Redimensionável na Horizontal dos campos de texto para garantir que os campos de texto sejam redimensionados com a janela e que o espaçamento entre os elementos permaneçam constantes.



. Salve as alterações.

Na view Design, seu form deve parecer com a imagem a seguir.

image::images/hib-jframe-form.png[title="Form GUI na View Design do editor"]

Agora que você tem um form, precisa criar o código para designar eventos aos elementos do form. No próximo exercício, você construirá consultas com base na Linguagem de Consulta Hibernate para recuperar dados. Depois de construir as consultas, você adicionará métodos ao form para chamar a consulta apropriada quando o botão Consulta for pressionado.


== Criando a consulta no Editor de Consultas HQL

No IDE, você pode construir e testar consultas com base no Idioma de consulta do Hibernate (HQL) usando o Editor de Consultas HQL. À medida que você insere a consulta, o editor mostra a consulta SQL equivalente (traduzida). Quando você clicar no botão "Executar Consulta HQL" na barra de ferramentas, o IDE executará a consulta e mostrará os resultados na parte inferior do editor.

Neste exercício, o Editor HQL é utilizado para construir consultas HQL simples que recuperam uma lista de detalhes de atores com base na correspondência do nome ou sobrenome. Antes de adicionar a consulta à classe, você utilizará o Editor de Consulta HQL para testar se a conexão está funcionando corretamente e se a consulta produz os resultados desejados. Antes de executar a pesquisa, é preciso compilar a aplicação.

1. Clique com o botão direito do mouse no nó do projeto e escolha Construir.

Quando você clica em Compilar, o IDE submete a download os artefatos necessários para seu repositório Maven local.



. Expanda o nó do pacote de código-fonte  ``<pacote default>``  sob o nó Outros Códigos-fonte na janela Projetos.


. Clique com o botão direito do mouse em  ``hibernate.cfg.xml``  e escolha Executar Consulta HQL para abrir o Editor HQL.


. Teste a conexão inserindo  ``from Actor``  no Editor de Consultas HQL. Clique no botão Executar Consulta HQL ( image::images/run_hql_query_16.png[title="Botão Executar Consulta HQL"] ) na barra de ferramentas.

Quando você clicar em Executar Consulta HQL, deverá visualizar os resultados da consulta no painel inferior do Editor de Consultas HQL.

image::images/hib-query-hqlresults.png[title="Hql Editor de Consulta mostrando resultados da consulta HQL"]


. Digite a consulta a seguir no Editor de Consultas HQL e clique em Executar consulta HQL para verificar os resultados da consulta quando a string de pesquisa for "PE".

[source,java]
----

from Actor a where a.firstName like 'PE%'
----

A consulta retorna uma lista de detalhes de atores para aos atores cujos nomes começam com "PE".

Ao clicar no botão SQL acima dos resultados, você deverá ver a seguinte consulta SQL equivalente.


[source,java]
----

select actor0_.actor_id as col_0_0_ from sakila.actor actor0_ where (actor0_.first_name like 'PE%' )
----


. Abra uma nova guia do Editor de Consulta HQL e insira a consulta a seguir no painel do editor. Clique em Executar Consulta HQL.

[source,java]
----

from Actor a where a.lastName like 'MO%'
----

A consulta retorna uma lista de detalhes de atores para os atores cujos sobrenomes começam com "MO".

Testar as consultas mostra que as elas retornam os resultados desejados. A próxima etapa é implementar as consultas na aplicação de modo que a consulta apropriada seja chamada clicando-se no botão Consulta no form.


== Adicionando a Consulta ao Form

Agora você precisa modificar o  ``DVDStoreAdmin.java``  para adicionar as strings de consulta e criar os métodos para construir e chamar uma consulta que incorpore as variáveis de entrada. Você também precisa modificar o handler de eventos do botão para chamar a consulta correta e adicionar um método para exibir os resultados da consulta na tabela.

1. Abra  ``DVDStoreAdmin.java``  e clique na guia Código-fonte.
2. Adicione as seguintes strings de consulta (em negrito) à classe.

[source,java]
----

public DVDStoreAdmin() {
    initComponents();
}

*private static String QUERY_BASED_ON_FIRST_NAME="from Actor a where a.firstName like '";
private static String QUERY_BASED_ON_LAST_NAME="from Actor a where a.lastName like '";*
----

É possível copiar as consultas das guias do Editor de Consulta HQL para o campo e, em seguida, modificar o código.



. Adicione os métodos a seguir para criar a consulta com base na string de entrada do usuário.

[source,java]
----

private void runQueryBasedOnFirstName() {
    executeHQLQuery(QUERY_BASED_ON_FIRST_NAME + firstNameTextField.getText() + "%'");
}
    
private void runQueryBasedOnLastName() {
    executeHQLQuery(QUERY_BASED_ON_LAST_NAME + lastNameTextField.getText() + "%'");
}
----

Esses métodos chamam o método  ``executeHQLQuery()``  e cria a consulta combinando a string de consulta com o usuário que inseriu a string de pesquisa.



. Adicione o método  ``executeHQLQuery()`` .

[source,java]
----

private void executeHQLQuery(String hql) {
    try {
        Session session = HibernateUtil.getSessionFactory().openSession();
        session.beginTransaction();
        Query q = session.createQuery(hql);
        List resultList = q.list();
        displayResult(resultList);
        session.getTransaction().commit();
    } catch (HibernateException he) {
        he.printStackTrace();
    }
}
----

O método  ``executeHQLQuery()``  chama o Hibernate para executar a consulta selecionada. Esse método usa a classe de utilitário  ``HibernateUtil.java``  para obter a Sessão Hibernate.



. Corrija suas importações e adicione instruções para as bibliotecas Hibernate ( ``org.hibernate.Query`` ,  ``org.hibernate.Session`` ) e  ``java.util.List`` .


. Crie um handler de eventos do botão Consulta alternando para a view Design e clicando duas vezes no botão Consulta.

O IDE cria o método  ``queryButtonActionPerformed``  e exibe o método na view Código-fonte.



. Modifique o método  ``queryButtonActionPerformed``  na view Código-fonte adicionando o código a seguir de modo que uma consulta seja executada quando o usuário clicar no botão.

[source,java]
----

private void queryButtonActionPerformed(java.awt.event.ActionEvent evt) {
    *if(!firstNameTextField.getText().trim().equals("")) {
        runQueryBasedOnFirstName();
    } else if(!lastNameTextField.getText().trim().equals("")) {
        runQueryBasedOnLastName();
    }*
}
----


. Adicione o método a seguir para exibir os resultados na JTable.

[source,java]
----

private void displayResult(List resultList) {
    Vector<String> tableHeaders = new Vector<String>();
    Vector tableData = new Vector();
    tableHeaders.add("ActorId"); 
    tableHeaders.add("FirstName");
    tableHeaders.add("LastName");
    tableHeaders.add("LastUpdated");

    for(Object o : resultList) {
        Actor actor = (Actor)o;
        Vector<Object> oneRow = new Vector<Object>();
        oneRow.add(actor.getActorId());
        oneRow.add(actor.getFirstName());
        oneRow.add(actor.getLastName());
        oneRow.add(actor.getLastUpdate());
        tableData.add(oneRow);
    }
    resultTable.setModel(new DefaultTableModel(tableData, tableHeaders));
}
----


. Corrija as importações (Ctrl+Shift+I) para adicionar o  ``java.util.Vector``  e salve as alterações.

Depois de salvar o form, você pode executar o projeto.


== Executando um Projeto Maven

Agora que a codificação foi finalizada, é possível construir o projeto e iniciar a aplicação. Quando um projeto Maven é construído no IDE, o Maven lê o POM do projeto para identificar as dependências do projeto. Todos os artefatos especificados como dependências precisam estar em seu repositório local do Maven para que o projeto possa ser construído. Se um artefato necessário não estiver no repositório local, o Maven fará check-out do artefato do repositório remoto antes de tentar construir e executar o projeto. Após construir o projeto, o Maven instalará o binário resultante como um artefato em seu repositório local.

*Observações.*

* Construir e executar um projeto pela primeira vez pode levar algum tempo se o IDE precisar fazer check-out de dependências do projeto. As construções subsequentes serão muito mais rápidas.
* Para executar esta aplicação, primeiro é preciso especificar a Classe Principal.

Para compilar e iniciar esta aplicação, execute as tarefas a seguir.

1. Clique com o botão direito do mouse no nó do projeto na janela Projetos e escolha Propriedades.
2. Selecione a categoria Executar, na caixa de diálogo Propriedades do Projeto.
3. Insira *sakila.ui.DVDStoreAdmin* como a Classe Principal. Clique em OK.

De modo alternativo, você pode clicar no botão Procurar e escolher a classe principal na caixa de diálogo.

image::images/browse-main-class.png[title="Definindo a Classe Principal na caixa de diálogo Procurar Classes Principais"]


. Clique em Executar Projeto principal na barra de ferramentas principal para iniciar a aplicação.

Quando a ação Executar é chamada em um projeto Maven no IDE, o IDE executa os objetivos Maven associados com a ação Executar. O IDE possui objetivos default vinculados às ações do IDE de acordo com o pacote do projeto. É possível exibir os objetivos vinculados à ação Executar no painel Ações da janela Propriedades do projeto

image::images/maven-projectproperties.png[title="Painel ações da janela propriedades do projeto DVDStoreAdmin"]

É possível personalizar a vinculação de objetivos às ações no painel Ações da janela Propriedades do projeto.

O form GUI é aberto quando você inicia a aplicação. Insira uma string de pesquisa no campo de texto Nome ou Sobrenome e clique em Consulta para pesquisar um ator e exibir os detalhes.

image::images/application-run.png[title="Aplicação Dvdstoreadmin mostrando os resultados"]

Se você observar a janela de Saída do IDE, poderá visualizar a consulta SQL que recuperou os resultados exibidos.


=== Fazendo Download do Projeto da Solução

Você pode fazer o download da solução para este projeto como um projeto das seguintes formas.

* Faça download link:https://netbeans.org/projects/samples/downloads/download/Samples/Java/DVDStoreAdmin-Maven.zip[+de um arquivo compactado zip do projeto finalizado+].
* Faça o check-out do código-fonte do projeto das Amostras do NetBeans ao executar as etapas a seguir:
1. Escolha Equipe > Subversion > Efetuar check-out no menu principal.
2. Na caixa de diálogo Efetuar Check-out, insira o Repositório URL a seguir:
 ``https://svn.netbeans.org/svn/samples~samples-source-code`` 
Clique em Próximo.


. Clique em Procurar para abrir a caixa de diálogo Procurar nas Pastas do Repositório:


. Expanda o nó-raiz e selecione *samples/java/DVDStoreAdmin-Maven*. Clique em OK.


. Especifique a Pasta Local para o códigos-fonte (a pasta local precisa estar vazia).


. Clique em Finalizar.

Quando você clica em Finalizar, o IDE inicializa a pasta local como um repositório Subversion e verifica os códigos-fonte do projeto.



. Clique em Abrir Projeto na caixa de diálogo exibida quando o check-out for concluído.

*Observações.*

* As etapas de check-out de códigos-fonte a partir do Kenai se aplicam somente ao NetBeans IDE 6.7 e 6.8.
* É necessário um cliente Subversion para fazer check-out dos códigos-fonte a partir do Kenai. Para saber mais sobre a instalação do Subversion, consulte a seção link:../ide/subversion.html#settingUp[+Configurando o Subversion+] no link:../ide/subversion.html[+Guia do Subversion no NetBeans IDE+].


== Criando POJOs e Arquivos de Mapeamento Individualmente

Como um POJO é uma classe Java simples, você pode usar o assistente Nova Classe Java para criar a classe e, em seguida, editar a classe no editor de código-fonte para adicionar os campos, getters e setters necessários. Depois de criar o POJO, use um assistente para criar um arquivo de mapeamento do Hibernate para associar a classe à tabela e adicionar informações de mapeamento ao  ``hibernate.cfg.xml`` . Quando você cria um arquivo de mapeamento a partir do rascunho, é necessário mapear os campos às colunas no editor XML.

*Observação.* Esse exercício é opcional e descreve como criar o arquivo de mapeamento e POJO que você criou com o assistente Hibernar Arquivos de Mapeamento e POJOs do Banco de Dados.

1. Clique com o botão direito do mouse no nó Pacotes de Códigos-fonte na janela Projetos e escolha Novo > Classe Java para abrir o assistente Nova Classe Java.
2. No assistente, insira *Ator* para o nome da classe e *sakila.entity* para o pacote. Clique em Finalizar.
3. Faça as seguintes alterações (exibidas em negrito) nas classes para implementar a interface serializável e adicionar campos nas colunas da tabela.

[source,java]
----

public class Actor *implements Serializable* {
    *private Short actorId;
    private String firstName;
    private String lastName;
    private Date lastUpdate;*
}
----


. Gere os getters e setters para os campos colocando o cursor de inserção no editor de código-fonte, digitando Alt-Insert e, em seguida, selecionando Getter e Setter.


. Na caixa de diálogo Gerar Getters e Setters, selecione todos os campos e clique em Gerar.
image::images/getters-setters.png[title="Caixa de diálogo Gerar Getters e Setters"]

Na caixa de diálogo Gerar Getters e Setters, você pode usar a seta para cima no teclado para mover o item selecionado para o nó Ator e pressionar a barra de espaços para selecionar todos os campos em Ator.



. Corrija as importações e salve as alterações.

Depois de criar o POJO para a tabela, você desejará criar um arquivo de mapeamento do Hibernate para  ``Actor.java`` .

1. Clique com o botão direito do mouse no nó de pacotes de código-fonte  ``sakila.entity`` , na janela Projetos, e escolha Novo > Outro para abrir o assistente Novo Arquivo.
2. Selecione o assistente Mapeamento do Hibernate na categoria Hibernate. Clique em Próximo.
3. Digite *Actor.hbm* como o Nome do Arquivo e defina a pasta como *src/main/resources/sakila/entity*. Clique em Próximo.
4. Digite *sakila.entity.Actor* para a Classe a ser Mapeada.
5. Selecione *actor* na lista drop-down Tabela do Banco de Dados, se não estiver selecionado. Clique em Finalizar.
image::images/mapping-wizard.png[title="Assistente Gerar Arquivos de Mapeamento de Hibernação"]

Quando você clicar em Finalizar, o arquivo de mapeamento do Hibernate  ``Actor.hbm.xml``  será aberto no editor de código-fonte. O IDE também adiciona automaticamente uma entrada para o recurso de mapeamento para  ``hibernate.cfg.xml`` . Você pode exibir os detalhes da entrada ampliando o nó Mapeamento, na view Design do  ``hibernate.cfg.xml``  ou na view XML. A entrada  ``mapeamento``  na view XML será semelhante a:


[source,xml]
----

        <mapping resource="sakila/entity/Actor.hbm.xml"/>
    </session-factory>
</hibernate-configuration>
----


. Associe os campos  ``Actor.java``  às colunas na tabela ACTOR fazendo as seguintes alterações (em negrito) no  ``Actor.hbm.xml`` .

[source,xml]
----

<hibernate-mapping>
  <class name="sakila.entity.Actor" *table="actor">
    <id name="actorId" type="java.lang.Short">
      <column name="actor_id"/>
      <generator class="identity"/>
    </id>
    <property name="firstName" type="string">
      <column length="45" name="first_name" not-null="true"/>
    </property>
    <property name="lastName" type="string">
      <column length="45" name="last_name" not-null="true"/>
    </property>
    <property name="lastUpdate" type="timestamp">
      <column length="19" name="last_update" not-null="true"/>
    </property>
  </class>*
</hibernate-mapping>
----

Você pode usar a funcionalidade autocompletar código no editor para completar os valores ao modificar o arquivo de mapeamento.

*Observação: *Por default, o elemento  ``class``  gerado tem uma tag de fechamento. Como você precisa adicionar elementos de propriedade entre as tags de abertura e fechamento do elemento  ``class`` , é necessário fazer as alterações a seguir (exibidas em negrito). Depois de fazer as alterações, você poderá usar a funcionalidade autocompletar código entre as tags  ``class`` .


[source,xml]
----

<hibernate-mapping>
  <class name="sakila.entity.Actor" *table="actor">
  </class>*
</hibernate-mapping>
----


. Clique no botão Validar XML na barra de ferramentas e salve as alterações.

A criação de POJOs individuais e arquivos de mapeamento do Hibernate pode ser um modo conveniente de personalizar ainda mais sua aplicação.

link:/about/contact_form.html?to=3&subject=Feedback:%20Creating%20a%20Maven%20Project[+Enviar Feedback neste Tutorial+]



== Consulte Também

Para obter informações adicionais sobre a criação de aplicações GUI do Swing, consulte os tutoriais a seguir.

* link:quickstart-gui.html[+Projetando uma GUI Swing no NetBeans IDE+]
* link:gui-functionality.html[+Introdução à Construção de GUIs+]
* link:../../trails/matisse.html[+Trilha de Aprendizado das Aplicações de GUI do Java+]
