## Datagen - overview

versione: 3.0.2

DATAGEN è uno strumento di generazione di codice specifico per la generazione dello strato software che realizza l'accesso ai dati mantenuti in un DBMS relazionale.

Il modello che descrive lo strato di accesso ai dati è:

- basato su un metamodello descritto in dettaglio in [Metamodel reference];
- strutturato in un insieme di modelli come descritto in dettaglio in [Models structure];

Il generatore non genera un progetto autoconsistente ma crea gli artefatti necessari a definire lo strato di accesso ai dati all'interno di un altro progetto java preesistente, che può essere un progetto di front-end (guigen) o un progetto di servizio SOA (servicegen).

### Funzionalità

L'elenco completo delle funzionalità è disponibile nell'apposita sezione

DATAGEN permette la realizzazione dello strato di accesso ai dati in due modalit� differenti:

1. modalità top-down, che consiste nella modellazione dello schema relazionale e nella generazione di:
   - script DDL di creazione dello schema
   - classi java che implementano lo strato DAO
2. modalità bottom-up, che consiste nell'effettuare il reverse engeneering dello schema DB e nella successiva generazione di:
   - classi java che implementano lo strato DAO
   - configurazioni spring correlate

La modalità top-down è attualmente in stato sperimentale. Per la modalità bottom-up è invece disponibile un wizard che permette di effettuare il reverse engineering a partire da uno schema relazionale esistente. In entrambe le modalità svolge un ruolo centrale il modello dello schema relazionale, con la sola differenza che nella modalità top-down è progettato direttamente, mentre nella modalità bottom-up è l'effetto di una lettura dei metadati dello schema oracle.

A questo modello dello schema relazionale si affianca un modello dello strato vero e proprio di accesso ai dati che, per ciascuna tabella permette di definire un DataAccessObject che può mettere a disposizione dell'utilizzatore:

- le funzioni per inserire un nuovo record (Inserter)(con la possibilità di utilizzare, se necessario, una sequence o altre tecniche per la creazione della primary key (PKGenerator)
- le funzioni per effettuare delle ricerche (Finder):
  - lettura di tutte le righe della tabella (FindAll)
  - lettura di un singolo record selezionato per primary key (FindByPK)
  - lettura di un sottoinsieme di record selezionati con criteri custom (CustomFinder, clausola WHERE da scrivere manualmente) oppure definizione completa della query tramite QueryDef
  - lettura di un sottoinsieme di record selezionati tramite la tecnica del Query By Example (QBEFinder, vedere la guida)
- Le funzioni per effettuare modifiche ai dati di uno o più record, selezionati per primary key o altri criteri custom (Updater)
- Le funzioni per cancellare uno o più record, selezionati per primary key o altri criteri custom (Deleter)

Ulteriori funzionalità, utilizzabili a corredo delle funzionalità principali sono:

- la possibilità di risolvere le tabelle di decodifica tramite il meccanismo dei LookupResolver (v. guida)

- La possibilità per i DAO di mantenere in cache i dati, nel caso in cui si specifichi che la tabella associata al DAO possiede caratteristiche di alta stabilità dei dati.

L'implementazione dei DataAccessObject è realizzata utilizzando il framework struts e jdbc-template: per utilizzare i DAO nella business logic sar� dunque sufficiente utilizzare i consueti meccanismi di localizzazione dei bean relativi e utilizzarne i metodi.

Circa i dettagli sulla struttura e il design del codice generato si rimanda a [design rationale].