Creare oggetti JavaScript da comandi SQL

Immagina di avere un sito web con un database MySQL che contiene informazioni sugli utenti. Sfruttando questo nuovo paradigma Web puoi creare un’applicazione HTML con JavaScript che permetta agli utenti di visualizzare e modificare dati da un database relazionale con comandi SQL convertiti in oggetti JavaScript. In poche parole, potrai mappare tabelle MySQL con oggetti JavaScript utilizzando Sequelize, una libreria JavaScript unica nel suo genere.

1. Introduzione

Sequelize è una libreria JavaScript che agisce come un ORM (Object-Relational Mapping), creando un ponte tra le tabelle del tuo database e gli oggetti JavaScript presenti nei tuoi script. Per gli scopi di questa guida ti spiegherò Sequelize con MySQL, ma considera che Sequelize, supporta tutti i database relazionali oggi disponibili.

Home page di sequelize.org
Home page di sequelize.org

Prima di iniziare ti informo che Sequelize esegue codice in modalità JavaScript asincrona, questo per evitare rallentamenti nell’accesso ai dati e penalizzare l’esecuzione della tua applicazione. Se vuoi approfondire questa straordinaria tecnica di programmazione puoi leggere anche questa interessantissima guida.


Leggi anche: Sviluppa la tua prima web app con Node JS


2. Installazione

Per iniziare, Sequelize è una libreria che puoi utilizzare tramite NodeJS, pertanto inizia installando Sequelize nel tuo progetto utilizzando il gestore di pacchetti npm di NodeJS. Il comando per installare Sequelize per MySQL è il seguente:

npm install sequelize mysql

In figura è visibile il comando per l’installazione delle dipendenze per SqlLite3:

Installare sequelize con il gestore di pacchetti NodeJS
Installare sequelize con il gestore di pacchetti NodeJS

3. Connessione al database

Dopo aver installato la libreria nel tuo progetto puoi configurare Sequelize per connettersi al tuo database MySQL, l’operazione è semplicissima basta chiamare il costruttore Sequelize con i parametri di connessione relativi al tuo database.

const Sequelize = require('sequelize');
const sequelize = new Sequelize('database', 'root', '', {
  host: 'localhost',
  dialect: 'mysql',
});

3.1 Definizione degli oggetti JavaScript come tabelle SQL

Ora non ti resta che creare un modello JavaScript per ogni tabella del tuo database. Ad esempio, per una ipotetica tabella “utenti” il codice sarebbe il seguente:

class Utente extends Sequelize.Model {}
Utente.init({
  id: {
    type: Sequelize.INTEGER,
    primaryKey: true,
    autoIncrement: true,
  },

  nome: {
    type: Sequelize.STRING,
  },

  email: {
    type: Sequelize.STRING,
    unique: true,
  },

}, {

  sequelize,
  modelName: 'utenti',

});

Come hai potuto notare nella classe Utente sono stati dichiarati tutti i campi della tabella Utenti così come definiti all’interno del database.

3.2 Sincronizzazione con il database

L’operazione che segue sincronizza i modelli con il database per creare le tabelle (se non esistono già), per cui con questo comando se la tabella utenti non esiste viene creata all’interno del database così come definita nella classe Utente:

sequelize.sync();

3.3 Operazioni CRUD

Come ogni ORM che si rispetti anche Sequelize fornisce metodi per operazioni CRUD (Create, Read, Update, Delete) sui dati, vediamoli tutti nel dettaglio:

3.4 Creazione di record da Oggetti Javascript

Una volta dichiarata la classe associata creare un nuovo utente è un gioco da ragazzi, infatti con queste semplici istruzioni potrai creare un nuovo record nella tabella Utenti con i dati indicati:

const nuovoUtente = await Utente.create({
  nome: 'Mario Rossi',
  email: '[email protected]',
});

3.5 Lettura di record in Oggetti JavaScript

Come ben sai è buona norma che ogni tabella di un database relazionale abbia un campo ID ad auto-incremento che sia anche chiave primaria della tabella. Per cui trovare un record indicando il suo ID diventa veramente semplice:

// Sostituisci 1 con l'ID dell'utente
const utente = await Utente.findByPk(1);

// Stampa "Mario Rossi"
console.log(utente.nome);

3.6 Aggiornamento record

Una volta mappata la tabella all’oggetto utente, potrai modificare i campi della tabella modificando gli attributi dell’oggetto mappato. Per cui per modificare il nome dell’utente non ti resta che assegnare un nuovo valore alla proprietà nome dell’oggetto utente. Successivamente il metodo save finalizzerà la modifica dei dati:

utente.nome = 'Mario Rossi Bianchi';
await utente.save();

3.7 Eliminazione di record

Pertanto per eliminare l’utente referenziato dall’ID = 1 basta eseguire le seguenti istruzioni:

// Sostituisci 1 con l'ID dell'utente
const utente = await Utente.findByPk(1);

// elimina il record corrispondente
await utente.destroy();

3.8 Relazionare gli Oggetti Javascript con Sequelize

Sequelize permette di definire relazioni tra modelli. Ad esempio, un utente può avere molti ordini, in questo caso è stata creata una relazione 1 a molti tra l’oggetto Utente e l’oggetto Ordine:

class Ordine extends Sequelize.Model {}
Ordine.init({

  id: {
    type: Sequelize.INTEGER,
    primaryKey: true,
    autoIncrement: true,
  },

  utenteId: {
    type: Sequelize.INTEGER,
    references: {
      model: 'utenti',
      key: 'id',
    },

  },

  ...

}, {
  sequelize,
  modelName: 'ordini',

});

Utente.hasMany(Ordine, { foreignKey: 'utenteId' });

4. Vantaggi di Sequelize

Come hai potuto appurare Sequelize offre numerosi vantaggi, tra cui:

a) Semplicità: Interfaccia intuitiva per la gestione del database.

b) Flessibilità: Supporta diverse relazioni tra modelli.

c) Riduzione del codice: Automatizza la scrittura di query SQL.

d) Portabilità: Funziona con diverse librerie e framework JavaScript.

5. Conclusione

Sequelize è una libreria potente e versatile che puoi utilizzare per mappare tabelle di un qualsiasi database relazionale con oggetti JavaScript. Questo tipo di approccio è molto utile e ti consentirà di programmare e gestire dati velocemente con un metodo professionale e intuitivo. Questo nuovo tipo di paradigma web è molto utilizzato dagli sviluppatori di API con NodeJS, infatti sfruttando questa straordinaria libreria potrai creare endpoint da cui estrapolare informazioni recuperate da qualsiasi database relazionale. Questo metodo ti farà risparmiare un’enorme quantità di tempo.

Domande frequenti:

1. A cosa serve la libreria JavaScript “Sequelize”?

Sequelize è una libreria JavaScript che facilita la mappatura tra oggetti JavaScript e tabelle MySQL. In parole semplici, permette di creare applicazioni JavaScript che interagiscono con il database in modo intuitivo e efficiente.

2. In quali casi è utile utilizzare Sequelize?

Sequelize è utile in tutti i casi in cui si necessiti di creare un’applicazione JavaScript che interagisce con un database MySQL. In particolare, è una scelta eccellente per:
Siti web dinamici: Permette di creare e gestire contenuti dinamici, come articoli, prodotti o utenti.
Applicazioni web: Offre un modo efficiente per recuperare e modificare dati in tempo reale.
API RESTful: Facilita la creazione di API per l’accesso ai dati del database.

3. Quali sono i vantaggi di utilizzare Sequelize?

Semplicità: Sequelize offre un’interfaccia intuitiva per la gestione del database, rendendo il codice più facile da leggere e scrivere.
Flessibilità: Supporta diverse relazioni tra modelli, permettendo di modellare dati complessi in modo efficace.
Riduzione del codice: Automatizza la scrittura di query SQL, evitando di scrivere codice ripetitivo e soggetto a errori.
Portabilità: Funziona con diverse librerie e framework JavaScript, garantendo flessibilità nella scelta dell’architettura del tuo progetto.

Antonio Lamorgese

Amministratore di rete e sviluppatore. Dopo anni di esperienza nel settore, ho ideato un sistema di gestione dati MYSQL in PHP senza scrivere una sola riga di codice. Scopri di più....