Spring - Présentation du framework JDBC

Tout en travaillant avec la base de données à l'aide de l'ancien JDBC, il devient fastidieux d'écrire du code inutile pour gérer les exceptions, ouvrir et fermer les connexions de base de données, etc. Cependant, Spring JDBC Framework prend en charge tous les détails de bas niveau à partir de l'ouverture de la connexion, préparez et exécutez l'instruction SQL, traitez les exceptions, gérez les transactions et fermez enfin la connexion.

Vous devez donc simplement définir les paramètres de connexion, spécifier l'instruction SQL à exécuter et effectuer le travail requis pour chaque itération tout en récupérant les données de la base de données.

Spring JDBC fournit plusieurs approches et différentes classes en conséquence pour s'interfacer avec la base de données. Je vais adopter l'approche classique et la plus populaire qui utiliseJdbcTemplateclasse du cadre. Il s'agit de la classe de structure centrale qui gère toutes les communications de la base de données et la gestion des exceptions.

Classe JdbcTemplate

La classe JDBC Template exécute des requêtes SQL, met à jour les instructions, stocke les appels de procédure, effectue des itérations sur les ResultSets et extrait les valeurs de paramètres renvoyées. Il détecte également les exceptions JDBC et les traduit dans la hiérarchie d'exceptions générique, plus informative, définie dans le package org.springframework.dao.

Les instances de la JdbcTemplate classe sont threadsafe une fois configuré. Vous pouvez donc configurer une seule instance d'un JdbcTemplate , puis injecter en toute sécurité cette référence partagée dans plusieurs DAO.

Une pratique courante lors de l'utilisation de la classe JDBC Template consiste à configurer un DataSource dans votre fichier de configuration Spring, puis à injecter les dépendances du bean DataSource partagé dans vos classes DAO, et le JdbcTemplate est créé dans le setter pour DataSource.

Configuration de la source de données

Créons une table de base de données Student dans notre base de données TEST. Nous supposons que vous travaillez avec une base de données MySQL, si vous travaillez avec une autre base de données, vous pouvez modifier vos requêtes DDL et SQL en conséquence.

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

Nous devons maintenant fournir un DataSource au modèle JDBC afin qu'il puisse se configurer pour accéder à la base de données. Vous pouvez configurer le DataSource dans le fichier XML avec un morceau de code comme indiqué dans l'extrait de code suivant -

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

Objet d'accès aux données (DAO)

DAO signifie Data Access Object, qui est couramment utilisé pour l'interaction avec la base de données. Les DAO existent pour fournir un moyen de lire et d'écrire des données dans la base de données et ils doivent exposer cette fonctionnalité via une interface par laquelle le reste de l'application y accède.

La prise en charge de DAO dans Spring facilite l'utilisation de technologies d'accès aux données telles que JDBC, Hibernate, JPA ou JDO de manière cohérente.

Exécuter des instructions SQL

Voyons comment nous pouvons effectuer une opération CRUD (Créer, Lire, Mettre à jour et Supprimer) sur des tables de base de données à l'aide d'un objet de modèle SQL et 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} );

Exécution d'instructions DDL

Vous pouvez utiliser le execute(..)de jdbcTemplate pour exécuter toutes les instructions SQL ou DDL. Voici un exemple d'utilisation de l'instruction CREATE pour créer une table -

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 );

Exemples de framework Spring JDBC

Sur la base des concepts ci-dessus, laissez-nous vérifier quelques exemples importants qui vous aideront à comprendre l'utilisation du framework JDBC au printemps -

Sr.No. Exemple et description
1 Exemple JDBC Spring

Cet exemple explique comment écrire une application Spring simple basée sur JDBC.

2 Procédure stockée SQL au printemps

Apprenez à appeler une procédure stockée SQL lors de l'utilisation de JDBC dans Spring.