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.
Indice del Post...
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.
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:
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:
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.
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.
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.