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

Tutoriel Spring JdbcTemplate

Spring JdbcTemplate C'est un mécanisme puissant qui peut se connecter à une base de données et exécuter des requêtes SQL. Il utilise internement l'API JDBC, mais supprime de nombreux problèmes de l'API JDBC.

Problèmes de l'API JDBC

Les problèmes de l'API JDBC sont les suivants :

Avant et après l'exécution de la requête, nous devons écrire beaucoup de code, par exemple créer des connexions, des statements, fermer les ensembles de résultats, des connexions, etc. Nous devons exécuter du code de gestion des exceptions sur la logique de base de données. Nous devons gérer les transactions. Repéter tout ce code d'une logique de base de données à une autre est une tâche chronophage.

Avantages de Spring JdbcTemplate

Spring JdbcTemplate supprime tous les problèmes de l'API JDBC. Il fournit des méthodes pour écrire directement des requêtes, économisant ainsi beaucoup de temps et d'efforts.

Méthodes Spring Jdbc

Le cadre Spring fournit les méthodes suivantes pour l'accès aux bases de données JDBC :

JdbcTemplate NamedParameterJdbcTemplate SimpleJdbcTemplate SimpleJdbcInsert et SimpleJdbcCall

Classe JdbcTemplate

C'est la classe centrale de support JDBC de Spring. Elle est responsable de la création et de la libération des ressources, par exemple la création et la fermeture des objets de connexion. Par conséquent, si vous oubliez de fermer la connexion, cela ne causera aucun problème.

Il traite les exceptions et fournit des messages d'exception via org.springframework.dao à l'aide des classes d'exceptions définies dans le package.

Nous pouvons exécuter toutes les opérations de base de données en utilisant la classe JdbcTemplate, par exemple insérer, mettre à jour, supprimer des données de la base de données et récupérer des données.

Voyons les méthodes de la classe Spring JdbcTemplate.

MéthodeDescription
public int update(String query)utilisé pour insérer, mettre à jour et supprimer des enregistrements.
public int update(String query, Object ... args)utilisé pour insérer, mettre à jour et supprimer des enregistrements en utilisant PreparedStatement avec des paramètres donnés.
public void execute(String query)utilisé pour exécuter des requêtes DDL.
public T execute(String sql, PreparedStatementCallback action)exécutant la requête en utilisant un PreparedStatementCallback.
public T query(String sql, ResultSetExtractor rse)utilisé pour obtenir des enregistrements en utilisant ResultSetExtractor.
public List query(String sql, RowMapper rse)utilisé pour obtenir des enregistrements en utilisant RowMapper.

Exemple de Spring JdbcTemplate

Nous supposons que vous avez déjà installé Oracle10le tableau suivant a été créé dans la base de données g.

create table employee(
id nombre(10)
name varchar2(100),
salary nombre(10)
);

Employee.java

Cette classe contient3une propriété avec constructeur, setter et getter.

package com.w3codebox;
public class Employee {
private int id;
private String name;
private float salary;
//constructeurs sans paramètres et paramétrés
//getters et setters
}

EmployeeDao.java

Il contient une propriété jdbcTemplate et trois méthodes saveEmployee(), updateEmployee et 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 utilisé pour inclure des informations sur la base de données, telles que le nom de la classe du pilote, l'URL de connexion, le nom d'utilisateur et le mot de passe.

La classe JdbcTemplate de type DriverManagerDataSource possède un nom datasource de l'attribut. Par conséquent, nous devons fournir une référence à l'objet DriverManagerDataSource pour l'attribut de source de données dans la classe JdbcTemplate.

Ici, nous utilisons l'objet JdbcTemplate dans la classe EmployeeDao, donc nous le transmettons par la méthode setter, mais vous pouvez également utiliser le constructeur.

<?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

Cette classe récupère le Bean à partir du fichier applicationContext.xml et appelle la méthode saveEmployee(). Vous pouvez également appeler les méthodes updateEmployee() et deleteEmployee() en déscommentant le code.

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);*/
  
}
}