English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Tutorial de Spring JdbcTemplate

Spring JdbcTemplate Es un mecanismo poderoso que permite conectarse a una base de datos y ejecutar consultas SQL. Internamente utiliza el API JDBC, pero elimina muchos problemas del API JDBC.

Problemas del API JDBC

Los problemas del API JDBC son los siguientes:

Antes y después de ejecutar la consulta, necesitamos escribir mucho código, como crear conexiones, declaraciones, cerrar conjuntos de resultados, conexiones, etc. Necesitamos ejecutar código de manejo de excepciones en la lógica de la base de datos. Necesitamos manejar transacciones. Es una tarea que consume tiempo copiar todo este código de una lógica de base de datos a otra.

Ventajas de Spring JdbcTemplate

Spring JdbcTemplate elimina todos los problemas del API JDBC. Proporciona métodos para escribir consultas directamente, ahorrando mucho tiempo y trabajo.

Métodos Spring Jdbc

Spring Framework proporciona los siguientes métodos para el acceso a bases de datos JDBC:

JdbcTemplate NamedParameterJdbcTemplate SimpleJdbcTemplate SimpleJdbcInsert y SimpleJdbcCall

Clase JdbcTemplate

Es la clase central de soporte JDBC de Spring. Se encarga de crear y liberar recursos, como crear y cerrar objetos de conexión, entre otros. Por lo tanto, si olvida cerrar la conexión, no causará ningún problema.

Maneja las excepciones y proporciona mensajes de información de excepción. org.springframework.dao con la ayuda de las clases de excepciones definidas en el paquete.

Podemos utilizar la clase JdbcTemplate para realizar todas las operaciones de base de datos, como insertar, actualizar, eliminar y recuperar datos de la base de datos.

Vamos a ver los métodos de la clase Spring JdbcTemplate.

MétodoDescripción
public int update(String query)para insertar, actualizar y eliminar registros.
public int update(String query, Object ... args)para insertar, actualizar y eliminar registros utilizando PreparedStatement con parámetros dados.
public void execute(String query)para ejecutar consultas DDL.
public T execute(String sql, PreparedStatementCallback action)para ejecutar consultas utilizando callback de PreparedStatement.
public T query(String sql, ResultSetExtractor rse)para obtener registros utilizando ResultSetExtractor.
public List query(String sql, RowMapper rse)para obtener registros utilizando RowMapper.

Ejemplo de Spring JdbcTemplate

Supongamos que ya ha configurado Oracle10se creó la siguiente tabla en la base de datos g.

create table employee(
id número(10)
name varchar2(100),
salary número(10)
);

Employee.java

Este clase contiene3Un atributo con constructor, setter y getter.

package com.w3codebox;
public class Employee {
private int id;
private String name;
private float salary;
//Constructores sin parámetros y parametrizados
//getters y setters
}

EmployeeDao.java

Contiene una propiedad jdbcTemplate y tres métodos saveEmployee(), updateEmployee y deleteEmployee().

package com.w3codebox;
import org.springframework.jdbc.core.JdbcTemplate;
public class EmployeeDao {
    private JdbcTemplate jdbcTemplate;
    public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {
      this.jdbcTemplate = jdbcTemplate;
    }
    public int saveEmployee(Employee e){
      String query="insert into employee values('"+e.getId()+"','"+e.getName()+"','"+e.getSalary()+"')";
      return jdbcTemplate.update(query);
    }
    public int updateEmployee(Employee e){
      String query="update employee set 
      name='"+e.getName()+"',salary='"+e.getSalary()+"' where id='"+e.getId()+"' ";
      return jdbcTemplate.update(query);
    }
    public int deleteEmployee(Employee e){
      String query="delete from employee where id='"+e.getId()+"' ";
      return jdbcTemplate.update(query);
    }
}

applicationContext.xml

DriverManagerDataSource para contener información sobre la base de datos, como el nombre de la clase del controlador, la URL de conexión, el nombre de usuario y la contraseña.

En la clase JdbcTemplate de tipo DriverManagerDataSource hay un método llamado datasource de propiedades. Por lo tanto, necesitamos proporcionar una referencia al objeto DriverManagerDataSource para la propiedad de origen de datos en la clase JdbcTemplate.

Aquí, en la clase EmployeeDao, utilizamos el objeto JdbcTemplate, por lo tanto, lo pasamos mediante el método setter, pero también puede usar el constructor.

<?xml version="1.0" encoding="UTF-8"?>
<beans
  xmlns="http://www.springframework.org/schema/beans"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance
  xmlns:p="http://www.springframework.org/schema/p
  xsi:schemaLocation="http://www.springframework.org/schema/beans 
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
<bean id="ds" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="oracle.jdbc.driver.OracleDriver"> />
<property name="url" value="jdbc:oracle:thin:@localhost:1521:xe" />
<property name="username" value="system"> />
<property name="password" value="oracle"> />
</bean>
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<property name="dataSource" ref="ds"></property>
</bean>
<bean id="edao" class="com.w3codebox.EmployeeDao">
<property name="jdbcTemplate" ref="jdbcTemplate"></property>
</bean>
</beans>

Test.java

Esta clase obtiene el Bean desde el archivo applicationContext.xml y llama al método saveEmployee(). También puede llamar a los métodos updateEmployee() y deleteEmployee() descomentando el código.

package com.w3codebox;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class Test {
public static void main(String[] args) {}}
  ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
  
  EmployeeDao dao = (EmployeeDao) ctx.getBean("edao");
  int status = dao.saveEmployee(new Employee(102,"Amit",35000));
  System.out.println(status);
    
  /*int status = dao.updateEmployee(new Employee(102,"Sonoo",15000));
  System.out.println(status);
  */
    
  /*Employee e = new Employee();
  e.setId(102);
  int status = dao.deleteEmployee(e);
  System.out.println(status);*/
  
}
}