Sempre all'insegna della semplicità, Spring aggiunge alla programmazione JDBC il supporto ai parametri nominali, consentendo l'utilizzo di label come segnalibri al posto del classico punto interrogativo (?
). Questo da un lato favorisce la leggibilità delle query e dall'altro elimina possibili complicazioni dovute alla posizionalità dei parametri.
In Spring questa funzionalità viene offerta sia attraverso l'utilizzo diretto della classe NamedParameterJdbcTemplate
, che grazie al supporto del SimpleJdbcTemplate
visto in precedenza. Quest'ultima è la soluzione adottata per il prossimo esempio.
Il binding tra i parametri identificati dalle label e i relativi valori avviene tramite la classe SqlParameterSource
, la cui implementazione base è la MapSqlParameterSource
.
public class BookSimpleJdbcDaoSupportNamedValue extends SimpleJdbcDaoSupport {
public void update(Book book) {
MapSqlParameterSource parameters = new MapSqlParameterSource();
parameters.addValue("isbn", book.getIsbn());
parameters.addValue("author", book.getAuthor());
parameters.addValue("title", book.getTitle());
getSimpleJdbcTemplate().update("update books set author = :author, title = :title where isbn = :isbn",
parameters);
}
// ...
}
SqlParameterSource
offre anche un'altra implementazione in grado di effettuare un mapping automatico dei parametri, la classe BeanPropertySqlParameterSource
.
public class BookSimpleJdbcDaoSupportNamedValue extends SimpleJdbcDaoSupport {
public void insert(Book book) {
// Binding automatico dei parametri
SqlParameterSource parameters = new BeanPropertySqlParameterSource(book);
//Inserimento
getSimpleJdbcTemplate().update("insert into books (isbn, author, title) values (:isbn, :author, :title)",
parameters);
}
...
}
Finora abbiamo visto come il framework Spring si integri con la tecnologia JDBC per fornire uno strumento molto flessibile per l'accesso ai dati. Nelle prossime lezioni vedreomo come integrare il framework di persistenza Hibernate.