Spring - Panoramica del framework JDBC

Mentre si lavora con il database utilizzando il semplice vecchio JDBC, diventa complicato scrivere codice non necessario per gestire le eccezioni, aprire e chiudere le connessioni al database, ecc. Tuttavia, Spring JDBC Framework si prende cura di tutti i dettagli di basso livello a partire dall'apertura della connessione, preparare ed eseguire l'istruzione SQL, elaborare le eccezioni, gestire le transazioni e infine chiudere la connessione.

Quindi quello che devi fare è solo definire i parametri di connessione e specificare l'istruzione SQL da eseguire e fare il lavoro richiesto per ogni iterazione durante il recupero dei dati dal database.

Spring JDBC fornisce diversi approcci e corrispondentemente classi differenti per interfacciarsi con il database. Prenderò l'approccio classico e più popolare che utilizzaJdbcTemplateclasse del framework. Questa è la classe del framework centrale che gestisce tutte le comunicazioni del database e la gestione delle eccezioni.

Classe JdbcTemplate

La classe Template JDBC esegue query SQL, aggiorna le istruzioni, memorizza le chiamate di procedura, esegue l'iterazione sui ResultSet ed estrae i valori dei parametri restituiti. Inoltre rileva le eccezioni JDBC e le traduce nella gerarchia delle eccezioni generica, più informativa, definita nel pacchetto org.springframework.dao.

Le istanze della JdbcTemplate classe sono threadsafe una volta configurato. Quindi puoi configurare una singola istanza di un JdbcTemplate e quindi inserire in modo sicuro questo riferimento condiviso in più DAO.

Una pratica comune quando si utilizza la classe JDBC Template consiste nel configurare un DataSource nel file di configurazione Spring, quindi inserire in dipendenza quel bean DataSource condiviso nelle classi DAO, e il JdbcTemplate viene creato nel setter per DataSource.

Configurazione dell'origine dati

Creiamo una tabella di database Student nel nostro database TEST. Presumiamo che tu stia lavorando con il database MySQL, se lavori con qualsiasi altro database, puoi modificare di conseguenza le tue query DDL e SQL.

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

Ora dobbiamo fornire un DataSource al modello JDBC in modo che possa configurarsi per ottenere l'accesso al database. È possibile configurare DataSource nel file XML con una parte di codice come mostrato nel seguente frammento di codice:

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

Oggetto di accesso ai dati (DAO)

DAO è l'acronimo di Data Access Object, che viene comunemente utilizzato per l'interazione con il database. I DAO esistono per fornire un mezzo per leggere e scrivere dati nel database e dovrebbero esporre questa funzionalità attraverso un'interfaccia con cui il resto dell'applicazione accederà ad essi.

Il supporto DAO in primavera semplifica l'utilizzo di tecnologie di accesso ai dati come JDBC, Hibernate, JPA o JDO in modo coerente.

Esecuzione di istruzioni SQL

Vediamo come possiamo eseguire operazioni CRUD (Crea, Leggi, Aggiorna ed Elimina) sulle tabelle del database utilizzando SQL e l'oggetto Template 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} );

Esecuzione di istruzioni DDL

Puoi usare il file execute(..)da jdbcTemplate per eseguire qualsiasi istruzione SQL o istruzione DDL. Di seguito è riportato un esempio per utilizzare l'istruzione CREATE per creare una tabella:

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

Esempi di framework JDBC Spring

Sulla base dei concetti di cui sopra, controlliamo alcuni esempi importanti che ti aiuteranno a comprendere l'utilizzo del framework JDBC in primavera -

Sr.No. Esempio e descrizione
1 Esempio di Spring JDBC

Questo esempio spiegherà come scrivere una semplice applicazione Spring basata su JDBC.

2 Procedura memorizzata SQL in primavera

Scopri come chiamare la procedura memorizzata SQL durante l'utilizzo di JDBC in Spring.