Siamo quasi giunti agli strati più “bassi” (ma non meno interessanti) della nostra applicazione di tipo enterprise: DAO (Data Access Objects) e database. Prima di andare avanti però dobbiamo decidere come realizzare questo importantissimo strato applicativo.
È un lavoro sporco, ma qualcuno lo deve pur fare
Lo strato di accesso ai dati è di fatto quello che maggiormente si “sporca le mani”: deve presentare un’interfaccia semplice, efficiente e logica verso i dati, ma per farlo deve utilizzare strumenti che spesso non sono per nulla semplici, efficienti e… logici!
Gli strati superiori infatti maneggiano veri e propri oggetti, dotati di proprietà di vario tipo e con differenti semantiche di accesso come le collezioni (java.util.Set, java.util.List o java.util.Map), identificatori di vario tipo, eccetera. Se gestire tramite un database relazionale questo tipo di dati è una sfida, nascondere agli strati superiori i dettagli implementativi lo è ancora di più! Tutte queste problematiche sono raggruppate sotto la definizione di persistenza degli oggetti, argomento molto interessante ma anche molto complesso, che non tratteremo nei suoi aspetti teorici per evidenti motivi di spazio.
Ci occuperemo invece di implementare alcune soluzioni alternative, basate su crescenti livelli di astrazione ma cercando di realizzare sempre un lavoro pulito ed efficiente, nell’ottica di poter, un giorno, estendere e migliorare l’applicazione senza troppa fatica, in piena filosofia Agile.
Il database innanzi tutto
Per le nostre prove utilizzeremo il popolare database MySql, versione 5.x. Non ci sofferemeremo molto sulla sua installazione, ci preme però segnalare alcune configurazioni:
- è necessario che sia abilitata la creazione di tabelle di tipo InnoDB;
- si consiglia caldamente di utilizzare utf-8 come encoding di default per i campi di tipo testo.
Creazione tabelle e dati di test
Una volta installato il database create uno schema denominato arteraspringtutorial; salvate il contenuto dello script qui sotto in src/main/resources/create-tables.sql, aprite un client SQL (ad esempio l’ottimo e gratuito SquirrelSQL) ed eseguite lo script sullo schema appena creato:
[sql]create table insertions (
id bigint not null auto_increment,
title varchar(100) not null,
description longtext,
photo varchar(100),
price numeric (11, 2) not null,
creationDate datetime not null,
primary key (id)
) ENGINE=InnoDB;[/sql]
Lo script creerà l’unica tabella al momento utilizzata dalla nostra applicazione.
Il secondo script si occupa di inserire alcuni dati di test:
[sql]INSERT INTO `insertions` (`id`, `title`, `description`, `photo`, `price`, `creationDate`)
values(1, ‘Chitarra acustica’, ‘Lorem ipsum dolor sit amet, in diam nisl ut tellus a in.’,
‘1.jpg’, 50, ‘2011-05-01 11:00:55’);
INSERT INTO `insertions` (`id`, `title`, `description`, `photo`, `price`, `creationDate`)
values(2, ‘Collezione figurine Panini’, ‘Ac fugit in vivamus. Rhoncus libero fringilla.’,
null, 100, ‘2011-05-01 14:10:32’);
INSERT INTO `insertions` (`id`, `title`, `description`, `photo`, `price`, `creationDate`)
values(3, ‘Altro oggetto’, ‘Pede nascetur ante nam metus non mauris, fermentum neque aenean.’,
‘2.jpg’, 10,’2011-05-02 18:00:25′);
INSERT INTO `insertions` (`id`, `title`, `description`, `photo`, `price`, `creationDate`)
values(4, ‘Un altro oggetto ancora’, ‘Tristique aliquam ultricies, turpis consectetuer pede.’,
null, 20, ‘2011-05-02 20:31:55’);
INSERT INTO `insertions` (`id`, `title`, `description`, `photo`, `price`, `creationDate`)
values(5, ‘Offerta incredibile’, ‘Imperdiet nec odio et donec accumsan lacinia, dolor ut, metus aptent curabitur.’,
‘5.jpg’, 30, ‘2011-05-03 09:01:46’);
INSERT INTO `insertions` (`id`, `title`, `description`, `photo`, `price`, `creationDate`)
values(6, ‘Elicottero’, ‘Metus tellus phasellus felis, egestas massa praesent placerat sed.’,
null, 15000, ‘2011-05-03 11:00:56’);
INSERT INTO `insertions` (`id`, `title`, `description`, `photo`, `price`, `creationDate`)
values(7, ‘Sci da fondo’, ‘Placerat faucibus interdum, vivamus hendrerit, integer wisi.’,
‘7.jpg’, 80, ‘2011-05-06 11:00:55’);[/sql]
L’ultimo passo, prima dell’implementazione vera è propria, è l’aggiunta del driver JDBC di MySql, necessario per connettersi al database. Aggiungere quindi questa dipendenza nella sezione <dependencies> del file pom.xml:
[xml]<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.14</version>
</dependency>[/xml]