Hibernate - Panoramica ORM
Cos'è JDBC?
JDBC sta per Java Database Connectivity. Fornisce una serie di API Java per accedere ai database relazionali dal programma Java. Queste API Java consentono ai programmi Java di eseguire istruzioni SQL e interagire con qualsiasi database conforme a SQL.
JDBC fornisce un'architettura flessibile per scrivere un'applicazione indipendente dal database che può essere eseguita su piattaforme diverse e interagire con diversi DBMS senza alcuna modifica.
Pro e contro di JDBC
Pro di JDBC | Contro di JDBC |
---|---|
Elaborazione SQL pulita e semplice Buone prestazioni con dati di grandi dimensioni Ottimo per piccole applicazioni Sintassi semplice così facile da imparare |
Complesso se utilizzato in grandi progetti Grande sovraccarico di programmazione Nessun incapsulamento Difficile da implementare il concetto MVC La query è specifica per DBMS |
Perché Object Relational Mapping (ORM)?
Quando lavoriamo con un sistema orientato agli oggetti, c'è una mancata corrispondenza tra il modello a oggetti e il database relazionale. Gli RDBMS rappresentano i dati in un formato tabulare, mentre i linguaggi orientati agli oggetti, come Java o C #, lo rappresentano come un grafico di oggetti interconnessi.
Considera la seguente classe Java con i costruttori appropriati e la funzione pubblica associata:
public class Employee {
private int id;
private String first_name;
private String last_name;
private int salary;
public Employee() {}
public Employee(String fname, String lname, int salary) {
this.first_name = fname;
this.last_name = lname;
this.salary = salary;
}
public int getId() {
return id;
}
public String getFirstName() {
return first_name;
}
public String getLastName() {
return last_name;
}
public int getSalary() {
return salary;
}
}
Considera che gli oggetti di cui sopra devono essere memorizzati e recuperati nella seguente tabella RDBMS:
create table EMPLOYEE (
id INT NOT NULL auto_increment,
first_name VARCHAR(20) default NULL,
last_name VARCHAR(20) default NULL,
salary INT default NULL,
PRIMARY KEY (id)
);
Primo problema, cosa succede se dobbiamo modificare il design del nostro database dopo aver sviluppato alcune pagine o la nostra applicazione? In secondo luogo, il caricamento e l'archiviazione di oggetti in un database relazionale ci espone ai seguenti cinque problemi di mancata corrispondenza:
Sr.No. | Mancata corrispondenza e descrizione |
---|---|
1 | Granularity A volte avrai un modello a oggetti, che ha più classi del numero di tabelle corrispondenti nel database. |
2 | Inheritance Gli RDBMS non definiscono nulla di simile a Inheritance, che è un paradigma naturale nei linguaggi di programmazione orientati agli oggetti. |
3 | Identity Un RDBMS definisce esattamente una nozione di "uguaglianza": la chiave primaria. Java, tuttavia, definisce sia l'identità dell'oggetto (a == b) che l'uguaglianza dell'oggetto (a.equals (b)). |
4 | Associations I linguaggi orientati agli oggetti rappresentano associazioni utilizzando riferimenti a oggetti mentre un RDBMS rappresenta un'associazione come colonna di chiave esterna. |
5 | Navigation Le modalità di accesso agli oggetti in Java e in RDBMS sono fondamentalmente diverse. |
Il Ooggetto-Relazionale Mapping (ORM) è la soluzione per gestire tutti i disallineamenti di impedenza di cui sopra.
Cos'è ORM?
ORM sta per Ooggetto-Relazionale Mapping (ORM) è una tecnica di programmazione per convertire i dati tra database relazionali e linguaggi di programmazione orientati agli oggetti come Java, C #, ecc.
Un sistema ORM presenta i seguenti vantaggi rispetto al semplice JDBC:
Sr.No. | Vantaggi |
---|---|
1 | Passiamo agli oggetti di accesso al codice aziendale anziché alle tabelle DB. |
2 | Nasconde i dettagli delle query SQL dalla logica OO. |
3 | Basato su JDBC "sotto il cofano". |
4 | Non è necessario occuparsi dell'implementazione del database. |
5 | Entità basate su concetti di business piuttosto che sulla struttura del database. |
6 | Gestione delle transazioni e generazione automatica delle chiavi. |
7 | Sviluppo rapido dell'applicazione. |
Una soluzione ORM è composta dalle seguenti quattro entità:
Sr.No. | Soluzioni |
---|---|
1 | Un'API per eseguire operazioni CRUD di base su oggetti di classi persistenti. |
2 | Un linguaggio o un'API per specificare query che fanno riferimento a classi e proprietà delle classi. |
3 | Una funzione configurabile per specificare i metadati di mappatura. |
4 | Una tecnica per interagire con oggetti transazionali per eseguire controlli sporchi, fetch di associazioni pigre e altre funzioni di ottimizzazione. |
Framework Java ORM
Esistono diversi framework persistenti e opzioni ORM in Java. Un framework persistente è un servizio ORM che archivia e recupera oggetti in un database relazionale.
- Enterprise JavaBeans Entity Beans
- Oggetti dati Java
- Castor
- TopLink
- Primavera DAO
- Hibernate
- E molti altri