miércoles, 7 de septiembre de 2016

Crud zk , JPA , Java con Mysql

En esta entrada proporcionaré un ejemplo básico de como realizar el registro, actualizar y eliminar datos desde una aplicación con BD Mysql.
Utilizamos:
  • ZK
  • Java
  • Myqsl
  • JPA

Partiremos suponiendo que ya tienen el entorno listo para elaborar el ejemplo.

Trabajaremos en una tabla con los siguientes campos

Nuestro ejemplo tendrá lista en la parte inferior donde se ira actualizando conforme se elimine, edite o agregue una nueva persona.






 
  
   

Ahora, la parte del controlador
package controlador;


import java.util.List;


import org.zkoss.zk.ui.Component;
import org.zkoss.zk.ui.select.annotation.Wire;
import org.zkoss.zk.ui.util.GenericForwardComposer;
import org.zkoss.zul.Button;
import org.zkoss.zul.Combobox;
import org.zkoss.zul.ListModelList;
import org.zkoss.zul.Listbox;

import org.zkoss.zul.Textbox;

import datos.Dpersona;
import entidad.Persona;

public class PersonaControlador extends GenericForwardComposer{
private static final long serialVersionUID = 1L;
 
 //-----
 @Wire
 Textbox txt_IdPersona, txt_PrimerNombre, txt_Cedula, txt_Apellido, txt_Celular, txt_Email;
 Combobox cmb_Sexo;
 Button btn_Guardar, btn_Nuevo,btn_Editar,btn_Borrar;
 Listbox list_Persona;

 
 Persona datos = new Persona();
 
 public void doAfterCompose(Component comp) throws Exception {
  // TODO Auto-generated method stub
  
  super.doAfterCompose(comp);
  cargalist();
  refrescar_formulario();
 }
 
 public void refrescar_formulario(){
  txt_PrimerNombre.setValue("");
  txt_Apellido.setValue("");
  txt_Cedula.setValue("");
  txt_Celular.setValue("");
  txt_Email.setValue("");
  list_Persona.clearSelection();
  btn_Guardar.setDisabled(false);
  btn_Editar.setDisabled(true);
  btn_Borrar.setDisabled(true);
  cmb_Sexo.setValue("");
 }
 public void cargalist(){
  Dpersona per= new Dpersona();
  List lista=per.listapersonas();
  ListModelList listamodelo = new ListModelList(lista);
   list_Persona.setModel(listamodelo);
   list_Persona.renderAll();
 }
 
 public void onSelect$list_Persona(){
  Persona per=list_Persona.getSelectedItem().getValue();
  txt_IdPersona.setValue(Integer.toString(per.getIdPersona()));
  txt_PrimerNombre.setValue(per.getNombre());
  txt_Apellido.setValue(per.getApellido());
  txt_Cedula.setValue(per.getCedula());
  txt_Email.setValue(per.getEmail());
  txt_Celular.setValue(per.getCelular());
  cmb_Sexo.setValue(per.getSexo());
  btn_Guardar.setDisabled(true);
  btn_Editar.setDisabled(false);
  btn_Borrar.setDisabled(false);
 }
 public void onClick$btn_Nuevo(){
  cargalist();
  refrescar_formulario();
 }
 
 public void onClick$btn_Guardar(){
  try {
   String nombre=txt_PrimerNombre.getValue();
   String apellido= txt_Apellido.getValue();
   String cedula= txt_Cedula.getValue();
   String celular= txt_Celular.getValue();
   String email= txt_Email.getValue();
   String sexo= cmb_Sexo.getValue();
   if(nombre.isEmpty()||apellido.isEmpty()||cedula.isEmpty()||celular.isEmpty()||email.isEmpty()){
    alert("Todos los campos son obligatorios");
   }else{
    Persona per= new Persona();
    per.setNombre(nombre);
    per.setApellido(apellido);
    per.setCedula(cedula);
    per.setCelular(celular);
    per.setEmail(email);
    per.setSexo(sexo);
    per.setEstado("A");
    Dpersona.CrearPersona(per);
    alert("Persona creada correctamente...!");
    cargalist();
    refrescar_formulario();
   }
  } catch (Exception e) {
   alert("Error: " + e.getMessage());
  }
 }
 public void onClick$btn_Editar() {
  try {
 
  if (txt_PrimerNombre.getText().isEmpty() || txt_IdPersona.getText().isEmpty() || txt_Apellido.getText().isEmpty()
    || txt_Email.getText().isEmpty() || cmb_Sexo.getValue() == "" || txt_Cedula.getText().isEmpty()) {
   alert("Todos los campos con (*) son obligatorios");

  } else {

   Dpersona mper = new Dpersona();
   Persona per = new Persona();

   per.setIdPersona(Integer.parseInt(txt_IdPersona.getText()));
   per.setNombre(txt_PrimerNombre.getText().toUpperCase());
   per.setApellido(txt_Apellido.getText().toUpperCase());
   per.setCedula(txt_Cedula.getText());
   per.setCelular(txt_Celular.getText());
   per.setEmail(txt_Email.getText());
   per.setSexo(cmb_Sexo.getValue());
   per.setEstado("A");

   mper.Editarpersona(per);
   alert("Datos actualizados con exito");
   cargalist();
   refrescar_formulario();
   
   }
   } catch (Exception e) {// TODO Auto-generated catch block
    alert(e.getMessage());
   }
  
 }

 public void onClick$btn_Borrar() {
  try {
   Dpersona mper = new Dpersona();
   Persona per = new Persona();
   per.setIdPersona(Integer.parseInt(txt_IdPersona.getText()));
   per.setEstado("E");
   mper.Eliminarpersona(per);
   alert("Datos eliminados con exito");
   cargalist();
   refrescar_formulario();
   } catch (Exception e) {
      // TODO Auto-generated catch block
    alert(e.getMessage());
   }
  }

}

La capa de datos
package datos;
import java.util.List;

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import javax.persistence.Query;


import entidad.Persona;
public class Dpersona {
 
 public static void CrearPersona(Persona per) throws Exception{
   EntityManagerFactory emf = Persistence.createEntityManagerFactory("srlab");
     EntityManager entitymanager = emf.createEntityManager( );
     try{
      entitymanager.getTransaction().begin();
      entitymanager.persist(per);
      entitymanager.getTransaction().commit();
     } catch (Exception e) {
      entitymanager.getTransaction().rollback();
      throw new Exception("Error al registrar la Persona..!");

     }finally {
      entitymanager.close();
      emf.close();
     }
  
 }
 public void Editarpersona(Persona per) throws Exception {
 Persona per_aux = new Persona();
 EntityManagerFactory emf = Persistence.createEntityManagerFactory("srlab");
    EntityManager entitymanager = emf.createEntityManager( );
  try {
   entitymanager.getTransaction().begin();
   per_aux = entitymanager.find(Persona.class, per.getIdPersona());
   entitymanager.flush();
   per_aux.setNombre(per.getNombre());
   per_aux.setApellido(per.getApellido());
   per_aux.setCedula(per.getCedula());
   per_aux.setCelular(per.getCelular());
   per_aux.setEmail(per.getEmail());
   per_aux.setSexo(per.getSexo());
   per_aux.setEstado(per.getEstado());
   entitymanager.merge(per_aux);
   entitymanager.getTransaction().commit();

  } catch (Exception e) {
   // TODO: handle exception
   //e.printStackTrace();
   entitymanager.getTransaction().rollback();
      throw new Exception("Error al actualizar..!");
  } finally {
   entitymanager.close();
   emf.close();
  }
 }

 public void Eliminarpersona(Persona per) throws Exception {
  Persona per_aux = new Persona();
  EntityManagerFactory emf = Persistence.createEntityManagerFactory("srlab");
     EntityManager entitymanager = emf.createEntityManager( );
  try {
   entitymanager.getTransaction().begin();
   per_aux =entitymanager.find(Persona.class, per.getIdPersona());
   entitymanager.flush();
   per_aux.setIdPersona(per.getIdPersona());
   per_aux.setEstado(per.getEstado());
   entitymanager.merge(per_aux);//si quieres eliminar  aplica remove
   entitymanager.getTransaction().commit();
  } catch (Exception e) {
      throw new Exception("Error al eliminar..!");
  } finally {
   entitymanager.close();
   emf.close();
  }
 }
 @SuppressWarnings({ "unchecked", "finally" })
 public List listapersonas(){
   EntityManagerFactory emf=Persistence.createEntityManagerFactory("srlab");
   EntityManager entitymanager = emf.createEntityManager();
   List lista = null;
   try {
    entitymanager.getTransaction().begin();
    Query query = entitymanager.createNamedQuery("Persona.findAll",Persona.class);
    lista = query.getResultList();
   
   entitymanager.getTransaction().commit();
   } catch (Exception e) {
   // TODO: handle exception
    //e.printStackTrace(); 
   entitymanager.getTransaction().rollback();
   throw new Exception("no pode vose");
  
  }finally {
   entitymanager.close();
   emf.close();
   return lista;
   }
 
 }

}

La entidad que tendrán que generarla con JPA, pero bueno igual se las dejo =)
package entidad;

import java.io.Serializable;
import javax.persistence.*;


/**
 * The persistent class for the persona database table.
 * 
 */
@Entity
@NamedQuery(name="Persona.findAll", query="SELECT p FROM Persona p where p.estado ='A'")
public class Persona implements Serializable {
 private static final long serialVersionUID = 1L;

 @Id
 @Column(name="id_persona")
 private int idPersona;

 private String apellido;

 private String cedula;

 private String celular;

 private String email;

 private String estado;

 private String nombre;

 private String sexo;

 public Persona() {
 }

 public int getIdPersona() {
  return this.idPersona;
 }

 public void setIdPersona(int idPersona) {
  this.idPersona = idPersona;
 }

 public String getApellido() {
  return this.apellido;
 }

 public void setApellido(String apellido) {
  this.apellido = apellido;
 }

 public String getCedula() {
  return this.cedula;
 }

 public void setCedula(String cedula) {
  this.cedula = cedula;
 }

 public String getCelular() {
  return this.celular;
 }

 public void setCelular(String celular) {
  this.celular = celular;
 }

 public String getEmail() {
  return this.email;
 }

 public void setEmail(String email) {
  this.email = email;
 }

 public String getEstado() {
  return this.estado;
 }

 public void setEstado(String estado) {
  this.estado = estado;
 }

 public String getNombre() {
  return this.nombre;
 }

 public void setNombre(String nombre) {
  this.nombre = nombre;
 }

 public String getSexo() {
  return this.sexo;
 }

 public void setSexo(String sexo) {
  this.sexo = sexo;
 }

}
 
Igual aqui les dejo el archivo del projecto para que lo puedan descargar y una pagina donde podrán aprender más sobre JPA.
Archivo: Srlab
Pagina: JPA

Dudas o preguntas, comenten =) 

No hay comentarios:

Publicar un comentario