Spring Boot: Spring JDBC frente a Spring Data JDBC

Primavera JDBC

Spring puede realizar operaciones JDBC al tener conectividad con cualquiera de los jars de RDBMS como MySQL, Oracle o SQL Server, etc. Por ejemplo, si nos estamos conectando con MySQL, entonces necesitamos conectar «mysql-connector-java». Veamos cómo se ve un archivo pom.xml de un proyecto maven.

XML

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0  
                             http://maven.apache.org/maven-v4_0_0.xsd">
   <modelVersion>4.0.0</modelVersion>
   <groupId>com.gfg.common</groupId>
   <artifactId>SpringJDBCExample</artifactId>
   <packaging>jar</packaging>
   <version>1.0-SNAPSHOT</version>
   <name>SpringJDBCExample</name>
   <url>http://maven.apache.org</url>
   
   <dependencies>
      
      <!-- Spring framework -->
      <dependency>
         <groupId>org.springframework</groupId>
         <artifactId>spring</artifactId>
         <version>2.5.6</version>
         <!-- You can change corresponding version here -->
      </dependency>
      
      <!-- MySQL database driver -->
      <dependency>
         <groupId>mysql</groupId>
         <artifactId>mysql-connector-java</artifactId>
         <version>5.1.9</version>
         <!-- You can change corresponding version here -->
      </dependency>
      
   </dependencies>
   
</project>

Clase de modelo:

Necesitamos una clase MODEL para comenzar

Java

public class <ModelClass>
{
    int column1;
    String column2;
    int column3;
    // ....
    // corresponding getter and setter
    // methods for each and every column
     
}

Patrón DAO:

Java

public interface <SampleDAO>
{
    // To insert the records
    public void insert(ModelClass object);
     
    // To get the records
    public ModelClass findByXXX(int xxx);
}

Implementación de la interfaz DAO:

Java

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import javax.sql.DataSource;
 
// Provide necessary interface imports
// Provide necessary ModelClass imports
public class JdbcSampleDAO implements SampleDAO {
    private DataSource dataSource;
 
    public void setDataSource(DataSource dataSource)
    {
        this.dataSource = dataSource;
    }
 
    public void insert(ModelClass object)
    {
        // Write the necessary statements like providing SQL
        // insert statement
        // and execute them for making record insertion
    }
 
    public ModelClass findByXXX(int XXX)
    {
        // Write the necessary statements like providing SQL
        // select statement
        // and execute them for making record display
    }
}

JDBC de datos de primavera

Pertenece a la familia Spring Data. Básicamente, proporciona abstracciones para la capa de acceso a datos basada en JDBC. Proporciona un marco de mapeo relacional de objetos (ORM) fácil de usar para trabajar con bases de datos. Puede admitir objetos de entidad y repositorios. Debido a esto, se reducen muchas complejidades. La capa de acceso a datos es simple. Por lo tanto, se omiten características de JPA como Lazy Loading, almacenamiento en caché de entidades, etc. Debido a esto, las operaciones de JDBC en las entidades están bien atendidas. Veamos cuáles son las dependencias necesarias para Spring Data JDBC en el proyecto maven de Spring Boot .

XML

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-jdbc</artifactId>
</dependency>

Veamos cuáles son las dependencias necesarias para Spring Data JDBC en el proyecto Spring maven.

XML

<dependency>
    <groupId>org.springframework.data</groupId>
    <artifactId>spring-data-jdbc</artifactId>
      <!-- Specify the required version here -->
    <version>{version}</version>
</dependency>

Clase POJO:

Para crear la entidad, necesitamos usar un POJO (objeto Java simple y antiguo). Spring Data JDBC puede asignar nuestro POJO a una tabla de base de datos. Los siguientes puntos clave deben ser observados

  1. El POJO creado debe coincidir con la tabla de la base de datos. Si no, usa la anotación @Table y esto ayuda a hacer referencia al nombre real de la tabla.
  2. Se requiere la anotación @Id para identificar la clave principal
  3. Es una buena práctica que todos los campos de persistencia en POJO y las columnas de la tabla de la base de datos deben coincidir. De lo contrario, la anotación @Column es útil para proporcionar nombres de columna.

Ejemplo de clase POJO

Java

import lombok.Data;
import org.springframework.data.annotation.Id;
import org.springframework.data.relational.core.mapping.Table;
 
// Required for generating default getter and setter
@Data
 
// If POJO class name and db table name differs
@Table("<mention the name of db table>")
public class <POJOClass> {
    // For representing Primary key
    @Id
    private Long id;
    private String <columnName1>;
    private String <columnName2>;
    private Integer <columnName3>;
}

Para una clase POJO, no es obligatorio tener

  1. Un constructor parametrizado.
  2. Métodos de acceso.

Interfaz del repositorio:

Se admiten la interfaz de repositorio junto con los métodos de consulta y las anotaciones @Query. Los repositorios creados pueden ser una subinterfaz de CrudRepository.

Java

import org.springframework.data.repository.CrudRepository;
import org.springframework.stereotype.Repository;
import java.util.List;
 
@Repository
public interface <SampleRepository> extends CrudRepository<<POJOClass>, Long> {
    // XXX can be firstName, lastName, age, gender etc.,
    List<POJOClass> findByXXX(String XXX);
}

La consulta nombrada se puede construir como

Java

@Query("select * from <tableName> where condition = :<param>")
List<POJOClass> findByXXX(@Param("param") String XXX);

Diferencia entre Spring JDBC y Spring Data JDBC

Primavera JDBC

JDBC de datos de primavera

Spring JDBC es una clase de modelo. Spring Data JDBC es una clase POJO.
Getter y setters son obligatorios. Getter y setters no son obligatorios.
El constructor parametrizado será útil. El constructor parametrizado puede no ser útil.
No se requiere ninguna anotación específica. Lo único es que debemos tener atributos iguales que coincidan con la tabla DB y cada atributo debe tener un getter y un setter. Las anotaciones @Table, @ID y @Column son útiles para la conexión directa con la base de datos.
La capa de acceso a datos se especifica con la interfaz y su implementación. La capa de acceso a datos es simple y omite la carga diferida, la implementación de caché, etc., que está presente en JPA (API de persistencia de Java).

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 *