Spring - Descripción general del marco JDBC

Mientras trabaja con la base de datos usando JDBC simple y antiguo, se vuelve engorroso escribir código innecesario para manejar excepciones, abrir y cerrar conexiones de base de datos, etc. Sin embargo, Spring JDBC Framework se encarga de todos los detalles de bajo nivel a partir de la apertura de la conexión, prepárese y ejecutar la sentencia SQL, procesar excepciones, manejar transacciones y finalmente cerrar la conexión.

Entonces, lo que tiene que hacer es simplemente definir los parámetros de conexión y especificar la declaración SQL que se ejecutará y hacer el trabajo requerido para cada iteración mientras obtiene datos de la base de datos.

Spring JDBC proporciona varios enfoques y las correspondientes clases diferentes para interactuar con la base de datos. Voy a adoptar el enfoque clásico y más popular que utilizaJdbcTemplateclase del marco. Esta es la clase de marco central que administra toda la comunicación de la base de datos y el manejo de excepciones.

Clase JdbcTemplate

La clase Plantilla JDBC ejecuta consultas SQL, actualiza declaraciones, almacena llamadas a procedimientos, realiza iteraciones sobre ResultSets y extrae valores de parámetros devueltos. También detecta las excepciones de JDBC y las traduce a la jerarquía de excepciones genérica, más informativa, definida en el paquete org.springframework.dao.

Las instancias de la JdbcTemplate clase son multi-hilo , una vez configurado. Por lo tanto, puede configurar una sola instancia de JdbcTemplate y luego inyectar de manera segura esta referencia compartida en múltiples DAO.

Una práctica común cuando se usa la clase JDBC Template es configurar un DataSource en su archivo de configuración de Spring, y luego inyectar dependencia-ese bean de DataSource compartido en sus clases DAO, y el JdbcTemplate se crea en el setter para el DataSource.

Configurar fuente de datos

Creemos una tabla de base de datos Student en nuestra base de datos TEST. Suponemos que está trabajando con la base de datos MySQL, si trabaja con cualquier otra base de datos, puede cambiar sus consultas DDL y SQL en consecuencia.

CREATE TABLE Student(
   ID   INT NOT NULL AUTO_INCREMENT,
   NAME VARCHAR(20) NOT NULL,
   AGE  INT NOT NULL,
   PRIMARY KEY (ID)
);

Ahora necesitamos proporcionar una fuente de datos a la plantilla JDBC para que pueda configurarse para obtener acceso a la base de datos. Puede configurar DataSource en el archivo XML con un fragmento de código como se muestra en el siguiente fragmento de código:

<bean id = "dataSource" 
   class = "org.springframework.jdbc.datasource.DriverManagerDataSource">
   <property name = "driverClassName" value = "com.mysql.jdbc.Driver"/>
   <property name = "url" value = "jdbc:mysql://localhost:3306/TEST"/>
   <property name = "username" value = "root"/>
   <property name = "password" value = "password"/>
</bean>

Objeto de acceso a datos (DAO)

DAO son las siglas de Data Access Object, que se usa comúnmente para la interacción con la base de datos. Los DAO existen para proporcionar un medio para leer y escribir datos en la base de datos y deben exponer esta funcionalidad a través de una interfaz mediante la cual el resto de la aplicación accederá a ellos.

La compatibilidad con DAO en Spring facilita el trabajo con tecnologías de acceso a datos como JDBC, Hibernate, JPA o JDO de forma coherente.

Ejecutando sentencias SQL

Veamos cómo podemos realizar la operación CRUD (Crear, Leer, Actualizar y Eliminar) en tablas de base de datos usando SQL y el objeto Plantilla JDBC.

Querying for an integer

String SQL = "select count(*) from Student";
int rowCount = jdbcTemplateObject.queryForInt( SQL );

Querying for a long

String SQL = "select count(*) from Student";
long rowCount = jdbcTemplateObject.queryForLong( SQL );

A simple query using a bind variable

String SQL = "select age from Student where id = ?";
int age = jdbcTemplateObject.queryForInt(SQL, new Object[]{10});

Querying for a String

String SQL = "select name from Student where id = ?";
String name = jdbcTemplateObject.queryForObject(SQL, new Object[]{10}, String.class);

Querying and returning an object

String SQL = "select * from Student where id = ?";
Student student = jdbcTemplateObject.queryForObject(
   SQL, new Object[]{10}, new StudentMapper());

public class StudentMapper implements RowMapper<Student> {
   public Student mapRow(ResultSet rs, int rowNum) throws SQLException {
      Student student = new Student();
      student.setID(rs.getInt("id"));
      student.setName(rs.getString("name"));
      student.setAge(rs.getInt("age"));
      
      return student;
   }
}

Querying and returning multiple objects

String SQL = "select * from Student";
List<Student> students = jdbcTemplateObject.query(
   SQL, new StudentMapper());

public class StudentMapper implements RowMapper<Student> {
   public Student mapRow(ResultSet rs, int rowNum) throws SQLException {
      Student student = new Student();
      student.setID(rs.getInt("id"));
      student.setName(rs.getString("name"));
      student.setAge(rs.getInt("age"));
      
      return student;
   }
}

Inserting a row into the table

String SQL = "insert into Student (name, age) values (?, ?)";
jdbcTemplateObject.update( SQL, new Object[]{"Zara", 11} );

Updating a row into the table

String SQL = "update Student set name = ? where id = ?";
jdbcTemplateObject.update( SQL, new Object[]{"Zara", 10} );

Deleting a row from the table

String SQL = "delete Student where id = ?";
jdbcTemplateObject.update( SQL, new Object[]{20} );

Ejecución de declaraciones DDL

Puedes usar el execute(..)método de jdbcTemplate para ejecutar cualquier declaración SQL o declaración DDL. A continuación se muestra un ejemplo para usar la declaración CREATE para crear una tabla:

String SQL = "CREATE TABLE Student( " +
   "ID   INT NOT NULL AUTO_INCREMENT, " +
   "NAME VARCHAR(20) NOT NULL, " +
   "AGE  INT NOT NULL, " +
   "PRIMARY KEY (ID));"

jdbcTemplateObject.execute( SQL );

Ejemplos de Spring JDBC Framework

Basándonos en los conceptos anteriores, veamos algunos ejemplos importantes que lo ayudarán a comprender el uso del marco JDBC en Spring:

No Señor. Ejemplo y descripción
1 Ejemplo de Spring JDBC

Este ejemplo explicará cómo escribir una aplicación Spring simple basada en JDBC.

2 Procedimiento almacenado de SQL en Spring

Aprenda a llamar al procedimiento almacenado de SQL mientras usa JDBC en Spring.