Está en la página 1de 1

¡Claro!

Aquí te explico cada elemento de la clase AbstractDao:

1. public abstract class AbstractDao<T>


<T> <T>
implements Dao&lt;T&gt;: Esta línea define la clase AbstractDao como una clase abstracta que
implementa la interfaz Dao con un tipo genérico T.

2. private EntityManager entityManager = EntityManagerUtil.getEntityManager();: Esta línea crea una instancia de EntityManager utilizando
el método getEntityManager() de la clase EntityManagerUtil.

3. private Class&lt;T&gt;
<T> clazz;: Esta línea define una variable de tipo Class que se utilizará para almacenar la clase de entidad que se está
manejando.

4. public EntityManager getEntityManager() { return entityManager; }: Este método devuelve la instancia de EntityManager creada en el
constructor.

5. public Optional&lt;T&gt; get(int id) { return Optional.ofNullable(entityManager.find(clazz, id)); }: Este método busca una
entidad por su identificador y devuelve un objeto Optional que puede contener la entidad encontrada o ser nulo.

6. public Optional&lt;T&gt; get(Object id) { return Optional.ofNullable(entityManager.find(clazz, id)); }: Este método es similar al
anterior, pero acepta un objeto Object como identificador en lugar de un int.

7. public List&lt;T&gt; getAll() { String qlString = "FROM " + clazz.getName(); Query query =
entityManager.createQuery(qlString); return query.getResultList(); }: Este método devuelve una lista de todas las entidades de la clase
manejada.

8. public void save(T t) { executeInsideTransaction(entityManager -&gt; entityManager.persist(t)); }: Este método guarda una
entidad en la base de datos.

9. public void update(T t) { executeInsideTransaction(entityManager -&gt; entityManager.merge(t)); }: Este método actualiza una
entidad en la base de datos.

10. public void delete(T t) { executeInsideTransaction(entityManager -&gt; entityManager.merge(t)); }: Este método elimina una
entidad de la base de datos.

11. public void setClazz(Class&lt;T&gt; clazz) { this.clazz = clazz; }: Este método establece la clase de entidad que se está manejando.

12. private void executeInsideTransaction(Consumer&lt;EntityManager&gt; action) { EntityTransaction tx =


entityManager.getTransaction(); try { tx.begin(); action.accept(entityManager); tx.commit(); } catch (RuntimeException e) {
tx.rollback(); throw e; } }: Este método ejecuta una acción dentro de una transacción de base de datos. Si la acción se completa correctamente, se
confirma la transacción. Si ocurre una excepción, se revierte la transacción y se lanza la excepción.

En resumen, la clase AbstractDao proporciona métodos genéricos para realizar operaciones CRUD (crear, leer, actualizar y eliminar) en una base de datos
utilizando EntityManager. Al ser una clase abstracta, se espera que se extienda para proporcionar implementaciones específicas para cada entidad que se
maneje en la aplicación.

También podría gustarte