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

Spring e Hibernate

I principi di IoC per utilizzare gli ORM: annotation vs XML
I principi di IoC per utilizzare gli ORM: annotation vs XML
Link copiato negli appunti

Nelle lezioni precedenti abbiamo visto come Spring, grazie all'utilizzo dei template e dell'Inversion of Control, faciliti l'utilizzo della tecnologia JDBC per l'accesso ai dati, esonerando lo sviluppatore da tediose attività di contorno.

Ora cercheremo invece di affrontare il problema da una prospettiva diversa, cercando di capire come gli stessi principi siano validi anche per l'utilizzo degli ORM.

Un ORM, acronimo di Object Relation Mapping, è una tecnologia che nasce per semplificare la persistenza di oggetti in un database relazionale, generando automaticamente il codice SQL necessario.

Nel mondo J2E esiste una moltitudine di ORM e, dal canto suo, Spring offre loro un grande supporto che include tra gli altri Hibernate, Oracle TopLink, iBATIS SQL Maps, JDO e JPA.

Ci concentreremo in modo particolare sull'integrazione di Spring con Hibernate, senza dimenticare che gli stessi principi valgono anche per gli altri ORM supportati. Per comprendere appieno quanto stiamo per trattare è necessaria una conoscenza almeno basilare di Hibernate. Chi fosse al primo approccio con questa tecnologia, può leggere questo articolo.

Hibernate Mapping

Perché un ORM sia in grado di generare codice SQL è necessario specificare il mapping tra gli oggetti da persistere e le tabelle nel database.

Mapping con XML

In accordo con le specifiche Hibernate, uno dei metodi per effettuare questa operazione è utilizzare un file XML che, per convenzione, ha nome:

<classe>.hbm.xml

Di seguito è illustrato il file book.hbm.xml responsabile del mapping tra la classe Book vista in precedenza e la relativa tabella nella base dati.

<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="it.html.spring.book">
  <class name="Book" table="BOOK">
    <id name="isbn" type="string" column="ISBN"></id>
    <property name="titolo" type="string" column="TITOLO"></property>
    <property name="autore" type="string" column="AUTORE"></property>
  </class>
</hibernate-mapping>

La gestione del mapping per mezzo dei file XML è relativamente semplice, ma può risultare difficile da gestire, sopratutto quando il numero delle classi da persistere è alto.

Mapping con annotations

Un'alternativa è data dall'adozione delle JPA annotations introdotte da Sun a partire da Java 5 per permettere di specificare il mapping all'interno delle stesse classi da persistere. Le JPA annotations possono essere utilizzate da tutti gli ORM JPA-compliant come Hibernate.

Di seguito è mostrata la classe Book con aggiunte le annotations necessarie per la sua persistenza.

@Entity
@Table(name = "BOOK")
public class Book {
  @Id
  @Column(name = "ISBN")
  String isbn;
  @Column(name = "AUTORE")
  String autore;
  @Column(name = "TITOLO")
  String titolo;
  public String getIsbn() { return isbn; }
  public void setIsbn(String isbn) { this.isbn = isbn; }
  public String getAutore() { return autore; }
  public void setAutore(String autore) { this.autore = autore; }
  public String getTitolo() { return titolo; }
  public void setTitolo(String titolo) { this.titolo = titolo; }
  public String toString() {
    return isbn + " - " + autore + " - " + titolo;
  }
}

Dal codice risultante si nota subito come l'utilizzo di queste annotations renda le operazioni di mapping più semplici e manutenibili rispetto ai rispettivi file XML. Per questa ragione, da ora in poi, prenderemo in considerazione questa alternativa.

Ti consigliamo anche