Diferencia entre Spring DAO vs Spring ORM vs Spring JDBC

Spring Framework es un marco de aplicación y un contenedor de inversión de control para la plataforma Java. Cualquier aplicación Java puede utilizar las características principales del marco, pero existen extensiones para crear aplicaciones web sobre la plataforma Java EE.

Primavera-DAO 

Spring-DAO no es un módulo de resorte. No proporciona interfaces ni plantillas para acceder a los datos. Un cambio importante que debe escribirse al usar Spring DAO es que debe anotarse con @Repository . La razón para hacer esto es que las excepciones que pueden surgir en la tecnología subyacente, como JDBC, Hibernate, JPA, etc., se traducen consistentemente a su respectiva subclase DataAccessException. Veamos esto con un ejemplo de un escenario de servicio para estudiantes.

Inicialmente, Hibernate es el mecanismo de persistencia que se usó. Supongamos que asumimos que HibernateException se detecta en la capa de servicio. Debe haber pasos disponibles para atraparlo. Pero en algún momento, en lugar de Hibernate, se cambió a JPA, entonces no es necesario cambiar las interfaces DAO. 

En cambio, si se anota con @Repository, las excepciones relacionadas con las tecnologías subyacentes actuales se traducirán directamente a Spring DataAccessException. Debido a esta función, aunque las tecnologías subyacentes cambien de hibernación a JPA o de JPA a hibernación, se seguirán lanzando las mismas Spring DataAccessExceptions. De acuerdo con las tecnologías subyacentes, el resorte se traducirá de acuerdo con sus excepciones nativas.

Limitaciones en el uso de Sping DAO relacionadas con las excepciones

  • No debería detectar excepciones de persistencia.
  • La jerarquía de excepciones suele ser más rica y significativa que la proporcionada por Spring. Pero no hay mapeo de un proveedor a otro. La razón para agregar @Repository en el DAO es que los beans se agregan automáticamente mediante el procedimiento de escaneo. Spring tiene la tendencia de agregar otras características útiles a la anotación.

Fragmento de código de muestra relacionado con Spring DAO. La capa de implementación del servicio debe anotarse con @Repository seguido de su capa de servicio correspondiente.

Java

// Necessary imports
@Repository('<Specify the DAO that is getting accessed')
// Eg : StudentDAO
public class StudentDAOImplementsation
    extends HibernateDao<Student, Long>
    implements StudentDAO {
  
    @Override public boolean remove(Student studentObject)
    {
        // Write necessary steps
        return true;
    }
}

ORM de primavera

Spring-ORM es un módulo muy eficiente que funciona como un patrón paraguas. La razón para llamar a esto un paraguas es que cubre muchas tecnologías de persistencia, a saber, JPA, JDO, Hibernate e iBatis. Spring ofrece clases de integración para cada tecnología individual. Con esas clases de integración, cada tecnología se integra fácilmente con la gestión de transacciones de Spring. Principalmente, la inyección de DataSource se realiza a través del bean SessionFactory o EntityManagerFactory, etc. En el caso de JDBC puro, además de JdbcTemplate, no hay necesidad de ninguna clase de integración ya que JDBC (conectividad de base de datos Java) depende directamente de las fuentes de datos. Para cada tecnología, la configuración consiste básicamente en inyectar un bean DataSource en algún tipo. Para JDBC puro, no hay necesidad de tales clases de integración (aparte de JdbcTemplate), ya que JDBC solo se basa en un DataSource. No se requiere Spring-JDBC en el caso de ORM como JPA o Hibernate, pero se requiere Spring-Data. Spring-Data no es más que un proyecto general y puede proporcionar una API común que define el acceso al DAO y las anotaciones y cubre las fuentes de datos SQL y NoSQL. Las clases de modelo deben anotarse con @Entity y en esa clave principal debe anotarse con @Id. El código de muestra para la clase modelo de estudiante se proporciona a continuación.

Java

// Necessary import statements
  
// This is much required and here model class
// should match with database table name
@Entity 
public class Student {
  @Id
  private int studentId;
  // other necessary attributes like name, address etc.,
  // Corresponding getter and setter methods
}

Spring ORM DAO y la clase de servicio deben anotarse con @Component

Java

// Necessary import statements
@Component
public class StudentDAO {
  @PersistenceContext
  private EntityManager em;
  // Rest set of code
}

Primavera JDBC

Spring-JDBC proporciona la clase JdbcTemplate. Ayuda directamente a verificar consultas y parámetros SQL. No debe preocuparse por el código de plomería, ya que no lo requiere. La configuración con un DataSource es obligatoria. El código de ejemplo se proporciona a continuación.

Java

// necessary import statements
int totalStudents = jdbcTemplate.queryForObject("select count(1) from Student", Integer.class);
Student student = jdbcTemplate.queryForObject("select name, address from Student where id=?", 
            rs -> new Student(rs.getString(1), rs.getString(2)), 
            12345);

La ventaja de usar Spring-JDBC es que proporciona un JdbcDaoSupport, es útil para extender DAO. Tiene 2 propiedades, a saber, DataSource y JdbcTemplate. Son útiles para implementar métodos DAO. Además, hay un traductor de excepciones disponible que traduce las excepciones de SQL a Spring DataAccessExceptions.

Tabla de diferencias

Primavera DAO 

ORM de primavera

Primavera JDBC

El concepto generalizado y la anotación @Repository son obligatorios.

Fácil integración con Spring con lo siguiente

  • SessionFactory para Hibernate
  • EntityManagerFactory para JPA
  • SqlSessionFactory para MyBatis
Para llamadas JDBC simples.
La implementación del acceso a datos está totalmente separada y, por lo tanto, es independiente de la base de datos. La implementación de múltiples tecnologías es posible mediante la integración con las herramientas necesarias. Si la aplicación no es compleja y diversificada y se encuentra en una sola base de datos, podemos usarla y es eficiente.
Es necesario especificar una capa adicional y sus dependencias. Por lo tanto, puede llevar algún tiempo iniciar si la aplicación es compleja.  Es necesario especificar una capa adicional y sus dependencias. Por lo tanto, puede llevar algún tiempo iniciar si la aplicación es compleja.  Como esto es sencillo, no se requieren dependencias complejas, pero la portabilidad será menor si usamos esto.
Los problemas de mantenimiento estarán ahí debido a la complejidad de la capa adicional.  Los problemas de mantenimiento estarán ahí debido a la complejidad de la capa adicional.  Aquí menos mantenimiento solamente.
Se necesitan patrones de diseño como las clases de fábrica y el objeto de transferencia de datos (DTO) para implementarse junto con DAO. Obtuve el soporte para múltiples tecnologías como Hibernate, JPA e iBatis. La implementación es simple. Si se basa en una base de datos única y los medios de propósito de consulta directa pueden depender de esto.

Publicación traducida automáticamente

Artículo escrito por priyarajtt y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *