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