Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial

JDBC Template Injection

Iniettare un gestore JDBC nel mapping dei dati
Iniettare un gestore JDBC nel mapping dei dati
Link copiato negli appunti

Grazie all'utilizzo dell'Inversion of Control è possibile iniettare nella nostra classe un oggetto di tipo JdbcTemplate già inizializzato con un datasource. Esaminiamo il file di configurazione:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
                           http://www.springframework.org/schema/beans/spring-beans-2.0.xsd">
	<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
		<property name="driverClassName" value="org.apache.derby.jdbc.ClientDriver" />
		<property name="url" value="jdbc:derby://localhost:1527/library;create=true" />
		<property name="username" value="app" />
		<property name="password" value="app" />
	</bean>
	<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
		<property name="dataSource" ref="dataSource" />
	</bean>
	<bean id="bookDao" class="it.html.spring.book.BookJdbcDao">
		<property name="jdbcTemplate" ref="jdbcTemplate" />
	</bean>
</beans>

JdbcDaoSupport

La classe JdbcDaoSupport permette di agevolare l'utilizzo di JdbcTemplate implementando direttamente i metodi setDatasource() e setJdbcTemplate(). Facendo estendere questa classe ai propri DAO sara sufficente iniettare un datasource per poter utilizzare un JdbcTemplate attraverso il metodo getJdbcTemplate() (ereditato anch'esso da JdbcDaoSupport).

public class BookJdbcDao extends JdbcDaoSupport implements BookDao {
  ...
  //Inserimento
  public void insert(Book book)
  {
    getJdbcTemplate().update("insert into book (isbn, autore, titolo) values (?, ?, ?)",
	  			      new Object[] { book.getIsbn(), book.getAuthor(), book.getTitle() });
  }
}

SimpleJdbcTemplate

La classe SimpleJdbcTemplate aggiunge alcune funzionalità offerte da Java 1.5 alla classe base JdbcTemplate, semplificando ulteriormente le procedure di accesso ai dati.

Grazie al supporto dei parametri a lunghezza variabile è possibile passare direttamente i valori ai metodi di update senza dover utilizzare un array di oggetti.

public class BookJdbcDaoSupport extends SimpleJdbcDaoSupport implements BookDao {
  public void insert(Book book) {
    getSimpleJdbcTemplate().update("insert into book (isbn, autore, titolo) values (?, ?, ?)",
	     			                 book.getIsbn(), book.getAutore(), book.getTitolo());
	...
  }

Con l'utilizzo dei generics e dell'autoboxing anche le query vengono notevolmente semplificate.

In particolare Spring fornisce la classe ParameterizedBeanPropertyRowMapper, un'implementazione dell'interfaccia RowMapper che si occupa di effettuare le operazioni di mapping viste in precedenza in maniera transparente allo sviluppatore.

//Query di un singolo oggetto
public Book findByISBN(String isbn) {
  Book book = getSimpleJdbcTemplate().queryForObject("select * from books where isbn = ?",
                                                      ParameterizedBeanPropertyRowMapper.newInstance(Book.class),
                                                      isbn);
  return book;
}
// Query di una lista di oggetti
public List findAllBooks() {
  List books = (List) getJdbcTemplate().query( "select * from books",
		                                ParameterizedBeanPropertyRowMapper.newInstance(Book.class));
  return books;
}

Per effettuare delle prove è possibile scaricare l'esempio completo (progetto Eclipse)

Ti consigliamo anche