English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
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.
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.
Spring JdbcTemplate elimina todos los problemas del API JDBC. Proporciona métodos para escribir consultas directamente, ahorrando mucho tiempo y trabajo.
Spring Framework proporciona los siguientes métodos para el acceso a bases de datos JDBC:
JdbcTemplate NamedParameterJdbcTemplate SimpleJdbcTemplate SimpleJdbcInsert y SimpleJdbcCall
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étodo | Descripció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. |
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);*/ } }