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

Hibernate per principianti: il primo progetto con MyEclipse

Link copiato negli appunti

In questo articolo vogliamo illustrare in maniera semplice come utilizzare Hibernate all'interno degli ambienti Eclipse. In particolare utilizzeremo l'IDE commerciale Myeclipse for Spring 8 (versione trial), che contiene il plugin Hibernate Tools (ovviamente utilizzabile anche nelle versione free di Eclipse, installandolo a mano); abbiamo inoltre scelto di utilizzare come database relazionale MySQL.

Hibernate è un ORM (acronimo di Object Relational Mapping) ed in sostanza fa da ponte tra java e un database mappando ciascun record di quest'ultimo come oggetto Java.

Il nostro obiettivo sarà quindi utilizzare gli oggetti mappati per effettuare le classiche operazioni CRUD (Create Read Update Delete) sul database relegando ad hibernate il compito di
"sincronizzare" lo stato del database in funzione delle operazioni fatte sugli oggetti. Hibernate è un framework che non si lega ad uno specifico database piuttosto permette di specificare sia il dialetto utilizzato sia il tipo di database e vendor oltre che i parametri di collegamento come porta di ascolto, user e password.

Per chi non conoscesse affatto Hibernate rimandiamo all'articolo introduttivo su Hibernate già pubblicato.

Installazione di MySQL

Scarichiamo il pacchetto MySql alla seguente url: http://www.mysql.it/downloads/

Avviandolo, installeremo sia il database MySql che il workbench, che ci consentirà di effettuare delle operazioni DDL e DML (Data description Language e Data Manipulation Language). Avremo cioè sia modo di creare ad esempio uno schema o delle tabelle all'interno del database (quindi operazioni legate alla struttura), sia di effettuare delle query (operazioni legate ai dati contenuti nella struttura).

Installiamo quindi MySql: durante l'installazione verranno chieste diverse cose tra cui la password da utilizzare e se il database è presente sulla stessa macchina utente. A fine installazione lanciamo il workbench, la schermata iniziale sarà la seguente:

MySQL workbench welcome

mysql workbench welcome

ì

Cliccando due volte sulla istanza del database server creato inseriremo user e password ed avremo accesso alla schermata successiva se il server MySql è in stato running.

avvio di mysql con mysql workbench

Dobbiamo quindi assicurarci che il server MySql sia in esecuzione, normalmente o il servizio viene avviato all'avvio del sistema operativo oppure basta avviare il MySql workbench e cliccare due volte su open connection per aprire la connessione verso il database server oppure cliccare due volte su server administration per avviare il server e successivamente aprire la connessione al database server stesso:

MySQL workbench server administration

mysql workbench server administration

MySQL workbench open connection

mysql workbench open connection

MySQL workbench startup/shutdown

mysql workbench startup/shutdown

Configurazione MySQL

Clicchiamo sulla iconcina Home (la casa piccola in alto a sinistra) e andiamo quindi a creare un nuovo schema che chiamiamo mioschema ed una tabella nello schema che chiamiamo utenti:

mysql workbench create schema/table

mysql workbench create schema/table

Clicchiamo sull’iconcina in alto a destra per ottenere la visualizzazione visuale dei fields da inserire questo per creare i campi del record in maniera più veloce.

mysql workbench icona per la modifica visuale fields

mysql workbench icona per la modifica visuale fields

Inserire quindi i campi elencati avendo cura di specificare una primary Key con valore UNIQUE che specifica l’univocità della chiave ed il valore AI, che è l'acronimo di AutoIncrement, lasciando che sia il database a specificare di volta in volta ed in maniera incrementale la chiave di ciascun record:

mysql workbench creazione tabella

mysql workbench creazione tabella

Una volta cliccato sul tasto apply ci verrà
mostrato lo script SQL che verrà eseguito per apportare le modifiche richieste, quindi eseguito lo script verrà creata la tabella con i campi definiti.

mysql workbench SQL statements

mysql workbench SQL statements

Ovviamente il workbench ci permette anche di eseguire una query SELECT per stampare a video il contenuto della tabella che nel nostro caso non è ancora stata popolata:

mysql workbench SELECT

mysql workbench SELECT

La parte di sviluppo in Java

Utilizzeremo come IDE MyEclipse, in particolare la versione trial di MyEclipse for Spring che, rispetto all'IDE standard offre dei plugin preinstallati quindi solleva lo sviluppatore dall’onere dell'installazione e configurazione degli stessi.

Assicuriamoci prima di tutto di avere il server MySql in esecuzione come precedentemente descritto, avviamo MyEclipse e creiamo un progetto con nome HibernateFirstProject, creiamo a livello ROOT una cartella lib, e memorizziamo al suo interno il jar mysql-connector-java-5.1.18.jar, che rappresenta il connettore o driver che fa da ponte tra java e MySql server, e quindi con il database.

mysql-connector

mysql-connector

Connessione al database

Apriamo la prospettiva MyEclipse Database Explorer:

hibernate database explorer

hibernate database explorer

Ora premendo il tasto destro del mouse nel tab db browser creiamo un nuovo database connection driver e inseriamo le informazioni che abbiamo precedentemente definito, possiamo quindi testare la connessione per stabilire se funziona correttamente. Da rimarcare che nell'url abbiamo definito come macchina localhost e come porta di ascolto la 3306, ma possiamo tranquillamente cambiare entrambi laddove è necessario.

hibernate: creazione di una nuova connessione al database

hibernate: creazione di una nuova connessione al database

Proseguendo se clicchiamo due volte nel db browser su MySql (il driver precedentemente creato) potremo esplorare lo schema e le tabelle contenute in esso, ed allo stesso modo editare il contenuto dei records, anche se per il nostro articolo non è strettamente necessario.

hibernate: esplorazione schema

hibernate: esplorazione schema

La parte di sviluppo in Java

generazione delle classi con hibernate

A questo punto possiamo iniziare ad utilizzare il mapping dal database, generando automaticamente il codice delle classi corrispondenti alle nostre tabelle.

Clicchiamo ora sulla tabella utenti col tasto destro del mouse e scegliamo la voce Myeclipse/add Hibernate
Capabilities
, scegliamo tranquillamente l'ultima versione di Hibernate, e specifichiamo il nostro driver per accedere al database.

hibernate capabilities

hibernate capabilities

hibernate support

hibernate support

Infine possiamo specificare che vogliamo generare la SessionFactory class (utilizzata per ricavare il contesto transazionale) e il package (hibernate.generated) dove vogliamo sia memorizzato il cosiddetto artifact code, cioè il codice generato in maniera automatica.

hibernate driver

hibernate driver

hibernate creazione classe

hibernate creazione classe

Ora selezioniamo nuovamente la prospettiva DB BROWSER e selezioniamo dalla lista la voce Hibernate reverse Engineering.

hibernate reverse-engineering

hibernate reverse-engineering

Quindi selezioniamo le opzioni come in figura, dove specifichiamo in maniera customizzata gli artifacts da generare:

hibernate generazione classi

hibernate generazione classi

Il codice generato rientra nella configurazione prevista da Hibernate per il mapping ORM

Il file di configurazione Utenti.hbm.xml serve per mappare i campi del record su un oggetto Java
(Utenti.java), mentre Hibernate.cfg.xml serve per la configurazione della connessione al database.

hibernate codice generato

hibernate codice generato

Aggiungendo hibernate capabilities MyEclipse vi chiederà se utilizzare il connector nella cartella lib, oppure quello previsto nella generazione
dell’artifact code. Ovviamente scegliamo il nostro jar perchè lo abbiamo utilizzato per creare la driver
connection al database.

test delle classi generate con hibernate

Possiamo finalmente verificare che tutto stia funzionando corettamente, scrivendo una opportuna classe di prova:

package test;
import org.hibernate.Transaction;
import hibernate.generated.Utenti;
import hibernate.generated.UtentiDAO;
public class TestProject {
	public static void main(String[] args) {
		Utenti ut = new Utenti();
			ut.setNome("giuseppe");
			ut.setCognome("astarita");
			ut.setEmail("astaritagiuseppe@gmail.com");
		UtentiDAO dao = new UtentiDAO();
		System.out.println("start transaction..");
		Transaction tx = dao.getSession().getTransaction();
			tx.begin();
		System.out.println("save record..");
		dao.save(ut);
		tx.commit();
		System.out.println("commit transaction..");
		dao.getSession().close();
		System.out.println("close session..");
	}
}

Utilizzando la nostra classe di prova otterremo come output:

output console

output console

il nuovo record inserito

il nuovo record inserito

Al lettore il compito di implementare le altre operazioni CRUD, quello che abbiamo potuto verificare è che MyEclipse offre un supporto eccellente allo sviluppatore per quanto riguarda l’automatizzazione di alcune operazioni garantendo anche una notevole stabilità in fase
di sviluppo.

qualche considerazione finale

  • L’IDE MyEclipse è a pagamento, però i plugin utilizzati, sono disponibili (previa installazione) anche per le versioni free di eclipse.
  • Se modifichiamo la struttura della tabella/e ed effettuiamo successivamente un vuovo Reverse Engineering la procedura riproduce il codice aggiornato che, a meno di non specificare un nuovo package, sovrascrive quello precedente. Se scegliamo un nuovo package sarà opportuno una procedura di versionamento del codice generato.
  • Possiamo fare in modo che Hibernate gestisca in maniera trasparente il contesto transazionale
    attraverso il tag xml
    <property name="hibernate.connection.autocommit">true</property>
    nel file hibernate.cfg.xml
  • Le librerie hibernate importate prevedono un connettore verso il database: noi ne abbiamo utilizzato uno esterno perchè abbiamo creato prima il lato DB. In realtà potevamo procedere creando prima il progetto java, aggiungendo le hibernate capabilities, ed utilizzando il connettore java previsto nelle librerie di hibernate. Questo tipo di scelta ci vincola però all'aggiornamento di tutte le librerie se vogliamo aggiornare la versione del connettore.
  • Nel test code possiamo anche inserire una riga di codice che va a creare l’ID del’oggetto Utenti: Hibernate non considererà questo valore, cioè non lo userà come ID (Primary Key) perchè abbiamo delegato la generazione della chiave primaria al database.
    Questo discorso però non vale per il primo ID, cioè se specifichiamo l’ID per il primo record/oggetto, questo verrà utilizzato dal database come ID di partenza mentre i successivi ID dei corrispondenti Utenti non verranno presi in considerazione. Ad esempio se specifichiamo il primo ID del primo oggetto come ID=5 verrà memorizzato un record con questo ID, ma tutti i successivi saranno 6,7,8,9 ecc. indipendentemente dai valori scelti.

Ti consigliamo anche