Renan Martins
Muito além do cafezinho…
Publicidade : Compare Produtos, Lojas e Preços

Categories

Archives

Lista de Links

Recursos:

Estatísticas

Posts:13
Categorias:4
Comentários:55
Links:5
Páginas:1

Free Web Hosting

Netbeans 6.1 + JSF + JPA: Fazendo um simples CRUD

Abril 6th, 2008 by Renan

Boa noite! Primeiramente gostaria novamente de agradecer o aumento de visitas ao blog. Me esforcarei para atualiza-lo mais frequentemente.

Hoje mostrarei como fazer um CRUD simples utilizando o Netbeans 6.1 (Beta) , JavaServer Faces e JPA.

Por que Netbeans 6.1 (Beta) ? Bom, um recurso interessante de se criar paginas JSF a partir de entidades automaticamente existe na versao 5.5 , deixou de existir na 6.0 e voltará na versão 6.1, que terá lancamento dia 18 de abril deste ano =)
Então farei na 6.1 Beta por não querer usar a 5.5 e nao querer esperar o lancamento da 6.1 .

Partirei da hipótese que o leitor já tenha o Netbeans 6.1 instalado com suporte a JSF e JPA. Caso tenha dúvidas de qual versão baixar, pergunte-me e terei o prazer em responde-lo.

O que é JPA ?

http://en.wikipedia.org/wiki/Java_Persistence_API

———————————————————

Farei um sisteminha de Cadastro, remoção, edição e consulta de funcionários em empresas. Vou explicando com mais detalhes a medida que for dando os passos necessários.

Primeiramente, deve-se criar um novo projeto JavaServer Faces:

File -> New Project -> Web -> Web Application

Name: Exemplo
Server: Glassfish
JavaEE Version: Java EE 5

Next -> Escolha o framework JavaServer faces e clique em Finish.

Agora vamos criar o banco de dados no qual persistiremos os dados:

Vá na aba Services -> Databases -> Clique com botao direito em JavaDB e crie um novo banco de dados:

Name: exemplo
User name: root
Password: root

Pronto, agora com o projeto e o banco criados vamos criar a unidade de persistência (persistence.xml)

botao direito sobre o projeto -> New -> Persistence Unit e faça dessa forma:

Name: ExemploPU
Persistence provider: TopLink(default)
Data Source: New Data Source…

JNDI Name: jdbc/exemplo
Database Connection: jdbc/derby://localhost:1527/exemplo (Selecione o banco criado no passo anterior)

Marque a opcao “Use Java Transaction APIs” e selecione “CREATE” como estrategia para geração das tabelas.
Com isso não nos preocuparemos em criar as tabelas manualmente. Ao fazer o deploy da aplicação as tabelas serão criadas automaticamente. Clique em Finish.

Perceba que um arquivo persistence.xml foi criado.

Agora criaremos as entidades:

botao direito no projeto -> new -> entity class:

name: Funcionario
package: model
primary key type: Long

Crie tambem uma entidade chamada Empresa da mesma foram que criou a entidade Funcionario.

——————————————–

O que é uma entidade ?

Entidade é um objeto que pode ser gravador pelo mecanismo de persistencia. Cada entidade representará uma tabela no banco de dados. Seus atributos serão as colunas. Tudo isso é definido usando anotações(annotations). Uma entidade JPA é um POJO anotado!

Vejam o código da entidade Funcionario.java:

/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/

package model;

import java.io.Serializable;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.ManyToOne;

/**
*
* @author Martins
*/
@Entity
public class Funcionario implements Serializable {
private static final long serialVersionUID = 1L;

@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;

private float salario;

private String nome;

private String cargo;

@ManyToOne
private Empresa empresa;

public void setId(Long id) {
this.id = id;
}

public Long getId() {
return id;
}

@Override
public int hashCode() {
int hash = 0;
hash += (id != null ? id.hashCode() : 0);
return hash;
}

@Override
public boolean equals(Object object) {
// TODO: Warning - this method won't work in the case the id fields are not set
if (!(object instanceof Funcionario)) {
return false;
}
Funcionario other = (Funcionario) object;
if ((this.id == null && other.id != null) || (this.id != null && !this.id.equals(other.id))) {
return false;
}
return true;
}

@Override
public String toString() {
return "model.Funcionario[id=" + id + "]";
}

public float getSalario() {
return salario;
}

public void setSalario(float salario) {
this.salario = salario;
}

public String getNome() {
return nome;
}

public void setNome(String nome) {
this.nome = nome;
}

public String getCargo() {
return cargo;
}

public void setCargo(String cargo) {
this.cargo = cargo;
}

public Empresa getEmpresa() {
return empresa;
}

public void setEmpresa(Empresa empresa) {
this.empresa = empresa;
}

}

Analisando o código:

A anotação @Entity define a classe Funcionario como entidade de persistencia.

A anotação @Id define o atributo id como sendo a chave primária da tabela.

Automaticamente cada atributo com seu respectivo set e get irá ser persistido no banco (será uma coluna da tabela Funcionário)

A anotação @ManyToOne define a relacao N:1 de Funcionario para Empresa. Ou seja, funcionarios podem ter UMA empresa.

———————————————————

Agora vejam a entidade Empresa.java:

/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/

package model;

import java.io.Serializable;
import java.util.Collection;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.OneToMany;

/**
*
* @author Martins
*/
@Entity
public class Empresa implements Serializable {
private static final long serialVersionUID = 1L;

@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;

private String nome;

private String endereco;

@OneToMany(mappedBy="empresa")
private Collection funcionarios;

public void setId(Long id) {
this.id = id;
}

public Long getId() {
return id;
}

@Override
public int hashCode() {
int hash = 0;
hash += (id != null ? id.hashCode() : 0);
return hash;
}

@Override
public boolean equals(Object object) {
// TODO: Warning - this method won't work in the case the id fields are not set
if (!(object instanceof Empresa)) {
return false;
}
Empresa other = (Empresa) object;
if ((this.id == null && other.id != null) || (this.id != null && !this.id.equals(other.id))) {
return false;
}
return true;
}

@Override
public String toString() {
return "model.Empresa[id=" + id + "]";
}

public String getNome() {
return nome;
}

public void setNome(String nome) {
this.nome = nome;
}

public String getEndereco() {
return endereco;
}

public void setEndereco(String endereco) {
this.endereco = endereco;
}

public Collection getFuncionarios() {
return funcionarios;
}

public void setFuncionarios(Collection funcionarios) {
this.funcionarios = funcionarios;
}

}

Analisando o código:

Segue o mesmo padrao da entidade Funcionario. É criado uma colecao de funcionarios e a ela é atribuida a relacao OneToMany ( 1:N ).

@OneToMany(mappedBy=”empresa”)

Vejam que deve-se especificar qual o atributo da outra entidade faz referencia a esse relacionamento.

———————————————————

Pronto, temos nossas entidades prontas! Agora usaremos o recurso do Netbeans 6.1 citado no inicio do tutorial. Criar páginas JSF a partir de Entidades.
Esse recurso cria automaticamente os controllers, converters e as paginas .jsp necessárias para um CRUD no banco de dados.

Vamos lá:

botao direito no projeto -> new -> JSF Pages from entity class (parece o scaffold do rails):

Selecione as duas entidades e clique em add…
Após isso, clique em Next.

JSF Pages Folder: /
Package: controller

Clique em finish!

Será criado para cada entidade fornecida um Controller e um Converter. Nas páginas web será criado um diretorio para cada entidade e dentro dele as .jsps (new.jsp, edit,jsp, list.jsp, detail.jsp).

Pronto, agora Selecione o projeto e clique em Run.

Tchanan! Acabamos de criar um CRUD.

———————————————————

O exemplo mostrado neste tutorial foi muito simples, apenas para dar noção ao leitor de como usar os recursos do Netbeans para se trabalhar com JPA. Realmente está ficando muito prático!

Obrigado àqueles que leram todo o tutorial!

Estou aberto a críticas, sugestões e caso tenham dúvidas, não exitem em perguntar.

Renan Martins


BuscaPé, líder em comparação de preços na América Latina

Posted in Dicas | 19 Comments »

Free Hosting!!!

Março 25th, 2008 by Renan

Bom, hoje alguns amigos me perguntaram se eu conhecia algum servico de hospedagem gratuita. Disse que meu site estava hospedado em um totalmente gratuito e com um ótimo serviço! O primeiro post do meu blog foi sobre o 000webhost, porém devido as perguntas feitas hoje, ressalto que já utilizo o servico há 2 meses e até agora nenhum problema…. Está realmente bom.
Cliquem abaixo para cadastrar seu subdominio ou seu dominio e ter uma hospedagem grátis. Simples, rápida e eficiente:


Free Web Hosting

Estou um bom tempo sem postar devido a correria que está sendo os meus dias.

Em breve algo sobre JPA :D

Renan


BuscaPé, líder em comparação de preços na América Latina

Posted in Dicas | No Comments »

Uma homenagem às mulheres

Março 8th, 2008 by Renan

You need to a flashplayer enabled browser to view this YouTube video

Em especial a minha namorada Nayara, a MULHER da minha vida.


BuscaPé, líder em comparação de preços na América Latina

Posted in Mulher | 1 Comment »

As linguagens de programação mais utilizadas no mundo

Março 3rd, 2008 by Renan

A empresa Tiobe Software lança todo mês o resultado de uma pesquisa que mostra as linguagens de programação mais utilizadas no mundo.

Vejam como está o gráfico de março de 2008 :

Gráfico

Vejam que Java continua na frente(o que não é surpresa alguma) e assim deve ficar durante um longo tempo.

A surpresa é Ruby que já está praticamente empatada com delphi. Ruby, graças ao Ruby on Rails está crescendo muito no cenário dos programadores e penso que em breve passará python e C#.

De acordo com essas pesquisas e com o crescente uso das linguagens voltadas à web, podemos ver que tudo tende para esse lado(observem o crescimento de PHP também).

O que pensam sobre o assunto ?

Até a próxima!


BuscaPé, líder em comparação de preços na América Latina

Posted in Uncategorized | No Comments »

Ruby on Rails

Março 1st, 2008 by Renan

Antes de mais nada, fiquei algum tempo sem postar, estava aproveitando meu finalzinho de férias \o/… Ah, houve também um aumento considerável de visitas em meu site e gostaria de agradece-los … Obrigado.

Recentemente comecei a estudar ruby on rails para testar seu potencial em desenvolver aplicações web. Olha, é incrível. Facilita bastante, diminui consideravelmente o tempo de programação e não perde em muita coisa. Desenvolvi pequeninas coisas até agora, mas já deu para sentir tudo isso.

Não farei um tutorial introdutório de ruby on rails (quem sou eu) pois já existem vários. Quem tiver interesse, pode começar por esse artigo de 4 dias do Urubatan (na verdade é uma tradução):

 http://www.urubatan.com.br/quatro-dias-de-ruby-on-rails-primeiro-dia/

Penso que para projetos de pequeno e até médio porte RoR é uma excelente alternativa :)

Bons estudos!


BuscaPé, líder em comparação de preços na América Latina

Posted in Uncategorized | No Comments »

« Previous Entries