En este post procederemos a la creación del fichero DAO que manejará la capa de persistencia.
CREACIÓN DEL FICHERO DAO
Para manejar la capa de persistencia emplearemos un fichero DAO conjunto para las clases Empleado y Nomina. La clase Datosprofesionales no va a ser utilizada directamente, sino que sus datos serán accedidos a través de las otra clases.
Lo adecuado sería crear una clase DAO por cada uno de los ficheros models, pero a efectos didácticos de este ejemplo nos será más cómodo manejar una sola clase. Tampoco es adecuado implementar el EntityManagerFactory en una clase DAO, siendo siempre preferible crear una clase propia para crear y manejar ese objeto de acceso a datos. No obstante a efectos prácticos vamos a ignorar deliberadamente esas best-practices.
public class NominaDAO {
public static EntityManagerFactory emf;
public boolean creaEmpleado(Empleado empleado) {
if (empleado==null) return false;
EntityManager em=getSession();
EntityTransaction tx=em.getTransaction();
tx.begin();
try {
em.persist(empleado);
tx.commit();
} catch (Exception ps) {
tx.rollback();
ps.printStackTrace();
return false;
} finally {
if (em!=null) em.close();
}
return true;
}
public List<Empleado> listaEmpleados() {
List<Empleado> empleados=new ArrayList<Empleado>();
EntityManager em=getSession();
EntityTransaction tx=em.getTransaction();
Query q;
tx.begin();
try {
q=em.createQuery("SELECT e FROM Empleado e");
empleados=(List<Empleado>)q.getResultList();
tx.commit();
} catch (Exception ps) {
tx.rollback();
ps.printStackTrace();
return null;
} finally {
if (em!=null) em.close();
}
return empleados;
}
public boolean creaNomina(Nomina nomina) {
if (nomina==null) return false;
EntityManager em=getSession();
EntityTransaction tx=em.getTransaction();
tx.begin();
try {
em.persist(nomina);
tx.commit();
} catch (Exception ps) {
tx.rollback();
ps.printStackTrace();
return false;
} finally {
if (em!=null) em.close();
}
return true;
}
public List<Nomina> listaNominas() {
List<Nomina> nominas=new ArrayList<Nomina>();
EntityManager em=getSession();
EntityTransaction tx=em.getTransaction();
Query q;
tx.begin();
try {
q=em.createQuery("SELECT n FROM Nomina n");
nominas=(List<Nomina>)q.getResultList();
tx.commit();
} catch (Exception ps) {
tx.rollback();
ps.printStackTrace();
return null;
} finally {
if (em!=null) em.close();
}
return nominas;
}
public EntityManager getSession() {
if (emf==null) emf=Persistence.createEntityManagerFactory("NominaJPA");
return emf.createEntityManager();
}
public static void closeEmf() {
emf.close();
}
}
Normalmente, en un fichero DAO, habríamos creado las operaciones CRUD básicas, más las adicionales que vinieran determinadas por la implementación del interface (si lo hubiera) y las que procedieran por las necesidades del negocio.
En nuestro caso, solo queremos crear objetos, y comprobar si se han creado los objetos mediante un listado. Así pues hemos creado los métodos creaEmpleado(), listaEmpleados, creaNomina() y listaNominas(), cuyo objetivo son bastantes explicitas por su nombre ;-)
Continuará...
No hay comentarios:
Publicar un comentario