Recursos necessários:
IDE de desenvolvimento Java (Netbeans ou Eclipse).
Banco de dados DB2 ou MySQL.
Oracle TopLink Essential (funcionalidades para o JPA), pode ser obtido em : www.oracle.com/technology/jpa
Primeiramente vamos criar o Banco de Dados, abaixo temos uma figura do modelo do banco TUTORIAL e suas SQLs.
Figura 1: TUTORIAL DATABASE
CREATE DATABASE TUTORIAL;
USE TUTORIAL;
CREATE TABLE CITY(
ID INT PRIMARY KEY NOT NULL GENERATED ALWAYS AS IDENTITY,
CITY VARCHAR(30));
CREATE TABLE CLIENT(
ID INT PRIMARY KEY NOT NULL GENERATED ALWAYS AS IDENTITY,
NAME VARCHAR(50),
ADDRESS VARCHAR(100),
ID_CITY INT,
CONSTRAINT CLI_CITY_FK FOREIGN KEY(ID_CITY) REFERENCES CITY(ID)
);
Agora Utilizando sua IDE preferida devemos criar um novo projeto Web utilizando o framework JSF.
Com o projeto iniciado devemos criar três pacotes e um diretório como mostra a figura 2:
· Pacote – com.tutorialday.controller
· Pacote – com.tutorialday.dao
· Pacote – com.tutorialday.model
· Diretório – META-INF
Figura 2: Estrutura do Projeto
Criaremos agora as classes Entitys (City, Client) no pacote com.tutorialday.model, abaixo segue o source das mesmas.
CLASSE City
package com.tutorialday.model;
import java.util.Collection;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.OneToMany;
import javax.persistence.Table;
@Entity
@Table(name="city")
public class City {
@Id
@Column(name="id")
@GeneratedValue(strategy=GenerationType.IDENTITY)
private Integer id;
@Column(name="city")
private String city;
@OneToMany(cascade=CascadeType.ALL, mappedBy="city")
private Collection client;
public String getCity() {
return city;
}
public void setCity(String city) {
this.city = city;
}
public Collection getClient() {
return client;
}
public void setClient(Collection client) {
this.client = client;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
import java.util.Collection;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.OneToMany;
import javax.persistence.Table;
@Entity
@Table(name="city")
public class City {
@Id
@Column(name="id")
@GeneratedValue(strategy=GenerationType.IDENTITY)
private Integer id;
@Column(name="city")
private String city;
@OneToMany(cascade=CascadeType.ALL, mappedBy="city")
private Collection
public String getCity() {
return city;
}
public void setCity(String city) {
this.city = city;
}
public Collection
return client;
}
public void setClient(Collection
this.client = client;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
}
CLASSE Client
package com.tutorialday.model;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
@Entity
@Table(name="client")
public class Client {
@Id
@Column(name="id")
@GeneratedValue(strategy=GenerationType.IDENTITY)
private Integer id;
@Column(name="name")
private String name;
@Column(name="address")
private String address;
@ManyToOne
@JoinColumn(name="id_city", nullable = false)
private City city;
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public City getCity() {
return city;
}
public void setCity(City city) {
this.city = city;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
@Entity
@Table(name="client")
public class Client {
@Id
@Column(name="id")
@GeneratedValue(strategy=GenerationType.IDENTITY)
private Integer id;
@Column(name="name")
private String name;
@Column(name="address")
private String address;
@ManyToOne
@JoinColumn(name="id_city", nullable = false)
private City city;
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public City getCity() {
return city;
}
public void setCity(City city) {
this.city = city;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
Com nossas Classes Entitys pronta, vamos criar agora a classe BaseDao no pacote com.tutorialday.dao , a mesma é uma classe genérica que contém métodos genéricos e métodos específicos para persistência e manipulação dos nossos “objetos”.
CLASSE BaseDao
package com.tutorialday.dao;
import java.util.ArrayList;
import java.util.List;
import javax.faces.model.SelectItem;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import javax.persistence.Query;
import com.tutorialday.model.City;
public class BaseDao {
private static EntityManagerFactory emf;
private EntityManager getEntityManager(){
return emf.createEntityManager();
}
public BaseDao(){
emf =
Persistence.createEntityManagerFactory("tutorial");
}
// METODO PARA PERSISTIR
public boolean create(T obj){
EntityManager em = getEntityManager();
try{
em.getTransaction().begin();
em.persist(obj);
em.getTransaction().commit();
return true;
}
catch (Exception ex){
ex.printStackTrace();
em.getTransaction().rollback();
return false;
} finally {
em.close();
}
}
// METODO PARA ATUALIZAR
public boolean update(T obj){
EntityManager em = getEntityManager();
try{
em.getTransaction().begin();
em.merge(obj);
em.getTransaction().commit();
return true;
}
catch (Exception ex){
ex.printStackTrace();
em.getTransaction().rollback();
return false;
}
finally {
em.close();
}
}
// METODO PARA EXCLUIR
public boolean delete(T obj){
EntityManager em = getEntityManager();
try{
em.getTransaction().begin();
obj = em.merge(obj);
em.remove(obj);
em.getTransaction().commit();
return true;
}
catch (Exception ex){
ex.printStackTrace();
em.getTransaction().rollback();
return false;
} finally {
em.close();
}
}
import java.util.ArrayList;
import java.util.List;
import javax.faces.model.SelectItem;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import javax.persistence.Query;
import com.tutorialday.model.City;
public class BaseDao
private static EntityManagerFactory emf;
private EntityManager getEntityManager(){
return emf.createEntityManager();
}
public BaseDao(){
emf =
Persistence.createEntityManagerFactory("tutorial");
}
// METODO PARA PERSISTIR
public boolean create(T obj){
EntityManager em = getEntityManager();
try{
em.getTransaction().begin();
em.persist(obj);
em.getTransaction().commit();
return true;
}
catch (Exception ex){
ex.printStackTrace();
em.getTransaction().rollback();
return false;
} finally {
em.close();
}
}
// METODO PARA ATUALIZAR
public boolean update(T obj){
EntityManager em = getEntityManager();
try{
em.getTransaction().begin();
em.merge(obj);
em.getTransaction().commit();
return true;
}
catch (Exception ex){
ex.printStackTrace();
em.getTransaction().rollback();
return false;
}
finally {
em.close();
}
}
// METODO PARA EXCLUIR
public boolean delete(T obj){
EntityManager em = getEntityManager();
try{
em.getTransaction().begin();
obj = em.merge(obj);
em.remove(obj);
em.getTransaction().commit();
return true;
}
catch (Exception ex){
ex.printStackTrace();
em.getTransaction().rollback();
return false;
} finally {
em.close();
}
}
// METODO QUE RETORNA UMA LISTA DE CLIENT
public List allClient(){
EntityManager em = getEntityManager();
try{
Query usu = em.createQuery("select object(c) from Client as c");
return usu.getResultList();
}catch(Exception e){
return null;
}finally {
em.close();
}
}
public List allClient(){
EntityManager em = getEntityManager();
try{
Query usu = em.createQuery("select object(c) from Client as c");
return usu.getResultList();
}catch(Exception e){
return null;
}finally {
em.close();
}
}
// METODO QUE RETORNA UMA LISTA DE CITY
public List allCity(){
EntityManager em = getEntityManager();
try{
Query cty = em.createQuery("select object(ct) from City as ct");
return cty.getResultList();
}catch(Exception e){
return null;
}finally {
em.close();
}
}
public List allCity(){
EntityManager em = getEntityManager();
try{
Query cty = em.createQuery("select object(ct) from City as ct");
return cty.getResultList();
}catch(Exception e){
return null;
}finally {
em.close();
}
}
// METODO QUE RETORNA UMA LISTA DE NOMES DE CIDADES
@SuppressWarnings("unchecked")
public List listCity(){
EntityManager em = getEntityManager();
try{
Query city = em.createQuery("select ct.city from City as ct");
List list0 = city.getResultList();
Listlist = new ArrayList();
int i;
for (i=0; i <>
@SuppressWarnings("unchecked")
public List
EntityManager em = getEntityManager();
try{
Query city = em.createQuery("select ct.city from City as ct");
List
List
int i;
for (i=0; i <>
// METODO QUE RETORNA UM OBJETO CITY PEGANDO COMO PARAMETO O NOME DA CIDADE
@SuppressWarnings("unchecked")
public T findCityByName(String cty){
EntityManager em = getEntityManager();
try{
Query city = em.createQuery("select object(ct) from City as ct where ct.city
@SuppressWarnings("unchecked")
public T findCityByName(String cty){
EntityManager em = getEntityManager();
try{
Query city = em.createQuery("select object(ct) from City as ct where ct.city
like ?1" ).setParameter(1,cty+"%");
return (T) city.getSingleResult();
}catch(Exception e){
return null;
}finally {
em.close();
}
}
}
return (T) city.getSingleResult();
}catch(Exception e){
return null;
}finally {
em.close();
}
}
}
Na segunda parte iremos dar continuidade deste tutorial com a criação do FacesBean, mapeamento das classes Entitys e fazer a regra de navegação no arquivo faces-config.xml.
=) ...
8 comentários:
Muito bom o artigo!!!!
O tema é complexo... mas o exemplo foi simples!!!
Parabéns!
Boa!
Otimo e bem completo!
vlw!
Ótimo post,
posso dizer que foi bem direcionado e simples com o contexto inserido. A complexidade do código está muito bem colocada, de forma que usuários iniciantes e/ou avançados possam tirar suas dúvidas.
obs: Idiota é aquilo ou aquele que não consegue compreender contextos diferentes e adaptar-se.
Abraços
Muito bom o seu artigo. E quem foi que disse que para ser bom, te que ser complexo? tem que ser funcional e objetivo. Meus parabens, eu também programo desta forma... meus parabens
Good Job!
Caro autor, está faltando uma parte do código no trecho de: // METODO QUE RETORNA UMA LISTA DE NOMES DE CIDADES
Caro autor, está faltando uma parte do código no trecho de: // METODO QUE RETORNA UMA LISTA DE NOMES DE CIDADES
Postar um comentário