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

Accesso ai Dati

Introduzione alla gestione della persistenza dei dati in Spring
Introduzione alla gestione della persistenza dei dati in Spring
Link copiato negli appunti

Uno degli aspetti fondamentali quando si costruisce un'applicazione è la persistenza dei dati, per realizzare la quale, nel mondo Java, esiste una varietà numerosa di API e framework, come JDBC o Hibernate, dei quali parleremo nelle prossime lezioni.

Spring si inserisce in questo contesto mettendo a disposizione tutte queste tecnologie in un ambiente altamente flessibile, sfruttando appieno le potenzialità offerte dalla Dependency Injection e dall'Aspect Oriented.
In particolare Spring supporta:

  1. JDBC
  2. Java Persistence API (JPA)
  3. Java Data Objects (JDO)
  4. Hibernate
  5. Common Client Interface (CCI)
  6. iBATIS SQL Maps
  7. Oracle TopLink

Nelle prossime lezioni sarà illustrato attraverso frammenti di codice come utilizzare Spring per l'acesso ai dati mediante l'utilizzo di JDBC e Hibernate. Lo scopo degli esempi mostrati sarà quello di persistere un database di libri.

Il modello per l'esempio

Creiamo il nostro modello da persistere: è composto da una semplice classe Book contenente le proprietà necessarie per rappresentare un libro e dai relativi metodi accessori.

public class Book {
  String isbn;
  String author;
  String title;
  public String getIsbn() { return isbn; }
  public void   setIsbn(String isbn) { this.isbn = isbn; }
  public String getAuthor() { return author; }
  public void   setAuthor(String author) { this.author = author; }
  public String getTitle() { return title; }
  public void   setTitle(String title) { this.title = title; }
}

Questa classe rappresenta l'entità base da salvare in database.

Database

La persistenza del modello sarà effettuata nella tabella books del database library; di seguito i dettagli di connessione e creazione della tabella.

CONNECT 'jdbc:derby://localhost:1527/library;create=true';

CREATE TABLE BOOKS ( ISBN VARCHAR(13) NOT NULL,
                     AUTHOR VARCHAR(20),
                     TITLE VARCHAR(20),
                     PRIMARY KEY (ISBN));

Prerequisito essenziale per poter testare gli esempi che verranno proposti è l'installazione di un database. Una possibile scelta è Apache Derby, un database open source estremamente leggero e di facile configurazione.

Per avviare il server basterà semplicemente eseguire il file startServerNetwork.bat presente nella sottodirectory bin del path dove è stato installato Apache. A questo punto sarà possibile aprire la console applicativa attraverso il comando ij, da dove lanciare i comandi mostrati in figura 3.

Figura 3. Apache Derby Console
Data Access Object

Data Access Object

Una delle peculiarità principali di Spring è quella di favorire la scrittura di codice modulare favorendone il riuso. Per questa ragione Spring incoraggia l'utilizzo del DAO (Data Access Object), un pattern architetturale che ha come scopo quello di separare le logiche di business da quelle di accesso ai dati.

L'idea alla base di questo pattern è quello di descrivere le operazioni necessarie per la persistenza del modello in un'interfaccia e di implementare la logica specifica di accesso ai dati in apposite classi.

Figura 4. Diagramma UML del Data Access Object
Diagramma UML del Data Access Object

In figura è mostrato il diagramma UML dell'architettura che sarà utilizzata negli esempi che seguiranno. La logica di business necessaria per la persistenza del nostro modello è descritta nella classe BookDao, mentre nella classe BookJdbcDao troviamo un'implementazione specifica di questa interfaccia rivolta a gestire le logiche di accesso ai dati mediante tecnologia JDBC.

In questo scenario è possibile notare come grazie all'utilizzo del pattern DAO sia possibile con poco sforzo fornire ulteriori implementazioni della classe BookDao per introdurre nuove logiche di accesso ai dati (ad esempio per l'utilizzo di Hibernate un ipotetico BookHibernateDao).

L'interfaccia DAO che utilizeremo per i nostri scopi sarà così fatta:

public interface BookDao {
  public void insert(Book book);
  public void update(Book book);
  public void delete(String isbn);
  public Book findByISBN(String isbn);
  public List<Book> findAllBooks();
  public int bookCount();
}

Ti consigliamo anche