La forma más fácil de acceder a una base de datos en JAVA

Feb 17 2023
Comparación entre Hibernate, JPA, EclipseLink y Spring Data JPA ¿Qué es ORM en Java? ORM significa mapeo relacional de objetos, y es una técnica utilizada en Java y otros lenguajes de programación para mapear los datos almacenados en una base de datos relacional a objetos en un lenguaje de programación. La idea es proporcionar una forma conveniente de acceder y manipular los datos almacenados en la base de datos, sin tener que escribir código SQL.

Comparación entre Hibernate, JPA, EclipseLink y Spring Data JPA

Foto de Tobias Fischer en Unsplash

¿Qué es ORM en Java?

ORM significa mapeo relacional de objetos , y es una técnica utilizada en Java y otros lenguajes de programación para mapear los datos almacenados en una base de datos relacional a objetos en un lenguaje de programación. La idea es proporcionar una forma conveniente de acceder y manipular los datos almacenados en la base de datos, sin tener que escribir código SQL.

Los marcos populares de JAVA ORM incluyen:

  • Hibernar
  • JPA de datos de primavera
  • JPA

Hablemos unos de otros con más detalle.

Descripción general: API de persistencia de Java (JPA)

Proporciona una especificación para conservar, leer y administrar datos desde su objeto Java a tablas relacionales en la base de datos. Este marco proporciona una API conveniente y consistente para realizar operaciones CRUD (Crear, Leer, Actualizar, Eliminar) en la base de datos y administrar las relaciones entre los objetos. Esto puede ayudar a reducir la cantidad de código que debe escribirse y hacer que el código sea más fácil de mantener y de entender.

¿Hibernar contra JPA?

Hibernate es una implementación de JPA, mientras que JPA es una especificación para ORM en Java. JPA define un conjunto de API estándar para la persistencia de datos en una base de datos utilizando objetos Java, mientras que Hibernate es una implementación específica de esas API. Hibernate tiene una arquitectura más potente que JPA, ya que permite a los desarrolladores personalizar el proceso ORM.

Aquí hay un ejemplo simple de cómo podría persistir un objeto "Persona" simple en una base de datos usando JPA e Hibernate:

JPA

@Entity
public class Person {

    @Id
    @GeneratedValue
    private Long id;

    private String firstName;

    private String lastName;

    // Getters and setters omitted for brevity
}

// Persisting an entity using JPA
EntityManagerFactory emf = Persistence.createEntityManagerFactory("persistenceUnitName");
EntityManager em = emf.createEntityManager();

em.getTransaction().begin();
Person person = new Person();
person.setFirstName("John");
person.setLastName("Doe");
em.persist(person);
em.getTransaction().commit();

em.close();
emf.close();

@Entity
public class Person {

    @Id
    @GeneratedValue
    private Long id;

    private String firstName;

    private String lastName;

    // Getters and setters omitted for brevity
}

// Persisting an entity using Hibernate
SessionFactory sessionFactory = new Configuration()
                                .configure()
                                .buildSessionFactory();
Session session = sessionFactory.openSession();

session.beginTransaction();
Person person = new Person();
person.setFirstName("John");
person.setLastName("Doe");
session.save(person);
session.getTransaction().commit();

session.close();
sessionFactory.close();

Spring Data JPA vs JPA?

Spring Data JPA es un marco, mientras que JPA es una especificación. Spring Data JPA es una implementación de JPA predeterminada llamada Hibernate con la especificación que se proporciona como parte de Spring Framework.

Aquí hay un ejemplo usando JPA:

@Entity
public class Person {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    private String firstName;
    private String lastName;

    // Getters and setters ...
}

public class PersonDao {
    private EntityManager em;

    public PersonDao(EntityManager em) {
        this.em = em;
    }

    public void save(Person person) {
        em.getTransaction().begin();
        em.persist(person);
        em.getTransaction().commit();
    }

    public Person findById(Long id) {
        return em.find(Person.class, id);
    }
}

public interface PersonRepository extends JpaRepository<Person, Long> {
}

También puede usar PersonRepositorypara realizar operaciones más complejas simplemente declarando métodos con nombres específicos y siguiendo una convención de nomenclatura. Spring Data JPA generará automáticamente la implementación para usted.

Como puede ver, la forma más rápida de mapear una base de datos en Java es usando el marco Spring Data JPA.

Descripción general: Hibernar

Hibernate es un marco de mapeo relacional de objetos (ORM) de código abierto para el lenguaje de programación Java. El propósito de este marco es liberar a los desarrolladores de una cantidad significativa de datos relacionales, incluida la gestión de transacciones y la conversión de datos de una representación de objetos a una representación relacional.

Hibernate se puede usar con o sin la API de persistencia de Java (JPA), pero a menudo se usa junto con JPA para proporcionar una solución completa para la persistencia y el mapeo relacional de objetos en aplicaciones Java.

Ventajas

  • Este marco ORM simplifica el proceso de almacenamiento y recuperación de datos de una base de datos.
  • Proporciona más funciones de rendimiento y optimización, como la carga diferida que puede aumentar el rendimiento de su aplicación.
  • Proporciona una solución escalable para la persistencia y gestión de datos a gran escala.
  • Hibernate puede ser complejo de usar para relaciones complejas, como la herencia o las colecciones, lo que puede generar dificultades para asignar el modelo de objetos al modelo relacional.
  • Puede ser detallado, especialmente cuando se trata de escribir consultas, lo que puede dificultar la lectura y el mantenimiento del código.

Este marco trae el concepto de repositorios JPA, un conjunto de interfaces que define los métodos de consulta . Ya no necesita escribir demasiadas consultas. Spring Boot implementará automáticamente las interfaces de su repositorio, incluidos los métodos de búsqueda personalizados, a medida que los escriba.

Lo que puedes crear con Spring Data JPA:

  • Compatibilidad con repositorios: Spring Data JPA proporciona un enfoque basado en la interfaz para el acceso a los datos. Simplemente puede declarar una interfaz que se extiende JpaRepositoryy obtener operaciones CRUD básicas (Crear, Leer, Actualizar, Eliminar)
  • Creación de consultas: proporciona un mecanismo para crear consultas personalizadas
  • Paginación y clasificación
  • Transacciones: Spring Data JPA proporciona gestión automática de transacciones, fácil de realizar con una simple anotación @Transaction

Descripción general: EclipseLink

EclipseLink es una poderosa herramienta de mapeo relacional de objetos (ORM) que forma parte de las herramientas Java empresariales de Eclipse Foundation. Es un código abierto y una buena manera de empezar a aprender Java. No es fácil como Spring Data JPA, pero podrá comprender mejor lo que sucede dentro de una aplicación.

Admite muchas bases de datos que puede elegir, como Postgres, MySQL y MariaDB. Ofrece funciones útiles, como carga diferida y un alto nivel de rendimiento, y garantiza la escalabilidad de su aplicación.

La desventaja es que pueden requerir más instalación y configuración que otras herramientas ORM.

Ejemplo de una implementación simple de EclipseLink :

EntityManagerFactory emf = Persistence.createEntityManagerFactory("default");
        EntityManager em = emf.createEntityManager();

        //  clear
        em.getTransaction()
                        .begin();
        em.createQuery("DELETE FROM Employee ").executeUpdate();
        em.getTransaction()
                       .commit();

        Employee e1 = new Employee("Costel", "Daniel", "0742929245", 21, Departament.Marketing, 2100.0);
        Employee e2 = new Employee("Daniel", "Costin", "0742929345", 26, Departament.IT, 4100.0);
        Employee e3 = new Employee("Codrin", "Daniel", "0742929245", 41, Departament.HumanResource, 3100.0);
   
        em.getTransaction()
                        .begin();
        System.out.println("Saving your new employees");
        em.persist(e1);
        em.persist(e2);
        em.persist(e3);
      
        em.getTransaction()
                    .commit();

        System.out.println("End");
    }

Si está utilizando JPA , deberá escribir el código necesario para implementar la lógica de persistencia usted mismo. Pero con Spring Data JPA , gran parte de la lógica de persistencia se implementa automáticamente para que pueda concentrarse en escribir la lógica comercial de la aplicación. Es por eso que Spring Data JPA es más popular entre los desarrolladores porque pueden enfocarse en la lógica comercial y no escribir muchas consultas.

En conclusión, cuando elige una herramienta ORM, es importante considerar las necesidades específicas de su proyecto, incluido el tipo de base de datos que desea utilizar y la complejidad de su modelo de datos.

¡Hecho!

¡Estén atentos para más sobre el tema!

¡Gracias por leer!

Referencias