Categoria:

Esempio di come realizzare un’applicazione web CRUD con MyBatis e Spring

30/12/2017 15:44 Pubblicato da

MyBatis
In questo articolo proporrò un tutorial su come sviluppare un’applicazione web basata su Spring e MyBatis di tipo CRUD. L’applicazione consiste di un form di registrazione utente il quale servirà per prendere dei dati in input e salvarli all’interno del DB MySQL e di un panello di controllo delle registrazioni in cui è possibile modificare o eliminare un utente. Il progetto in questione usa Maven come gestore di progetto. Il sorgente si trova su github.

  Github

Creazione del progetto

Per prima cosa dobbiamo creare un nuovo progetto. Per farlo dobbiamo inanzitutto passare alla prospettiva Spring. Successivamente fare File, New, Spring Legacy Project. Definire il nome del progetto e successivamente selezionare dalla lista dei template Spring MVC Project. Premere su Next, definire il top-level package come com.cyberx.signup ed infine premere su Finish.
Adesso dovremmo avere ottenuto una strutture del progetto simile a quella mostrata nell’immagine sottostante.

Aggiornare il pom.xml

Per poter lavorare con MyBatis e MySQL dobbiamo innazitutto importare le librerie del framework per la persistenza dei dati e il driver MySQL. Per fare ciò basterà aggiungere qualche riga al file pom.xml di Maven.

Il servlet-context.xml

Il passo successivo sarà quello di modificare il file servlet-context.xml.

Includendo il bean InternalResourceViewResolver consentiamo a Spring di localizzare i file jsp. Il bean dataSource invece indica le credenziali di accesso alla nostra base di dati. La sqlSessionFactory è il cuore della configurazione di MyBatis. Questo bean ha tre proprietà: il dataSource che abbiamo già configurato, il typeAliasesPackage che indica dove sono localizzate le classi del model e il mapperLocations che indica dove sono localizzate i mapper xml (noi utilizzeremo interfacce con annotazioni invece dei classici file xml di configurazione, vedi MapperScannerConfigurer).

Il model

Le classi presenti nel package com.cyberx.signup.model verranno utilizzate da MyBatis per incapsulare i dati provenienti dal nostro DB. Nel model noi abbiamo una sola classe, Student.java. I campi dello studente saranno presenti anche nel form di inserimento dei dati della view.

Il mapper

Nel package com.cyberx.signup.mapper vanno inseriti tutti i mapper della nostra applicazione. Il mapper corrisponde al nostro DAO, esso infatti si occupa della comunicazione con la base di dati, ossia effettua l’accesso e le modifiche del DB. Il mapper è costituito dai metodi CRUD. Nel nostro caso abbiamo un solo mapper: StudentMapper.java

Utilizzando l’attributo useGeneratedKeys=true assieme a keyProperty="id" e keyColumn="id" all’interno dell’annotazione @Options possiamo ottenere l’id dell’utente appena inserito. La keyProperty="id" si riferisce al POJO mentre la keyColumn="id" si riferisce al nome della colonna all’interno del database.

Il service

Il Service è composto da un’interfaccia e da una classe che implementa l’interfaccia. Il service lo definiamo nel package com.cyberx.signup.service. Il service non fa altro che invocare i metodi dello StudentMapper.

Il Controller

Il controller lo definiamo nel package com.cyberx.signup.controller.

La classe consiste di alcuni metodi. Il primo serve per ritornare la pagina con il form di registrazione, mentre il secondo serve per salvare i dati all’interno della nostra base di dati MySQL. Il metodo public String list(Model model) di tipo GET serve per ritornare la lista degli utenti registrati al sistema. Con public String delete(@PathVariable("id") int id) invece andiamo a cancellare un record dalla tabella. All’invocazione del metodo public String edit(@PathVariable("id") int id, Model model) viene restituita la pagina di modifica di un utente. Il metodo public String edit(@ModelAttribute("student") Student student, Model model, @PathVariable("id") int id) invece serve per salvare le modifiche ad un utente.

La view home.jsp

La view consiste di una pagina jsp denominata home.jsp.

La view list.jsp

La view edit.jsp

Il database

La tabella presenta una chiave primaria di tipo autoincrement e due campi di tipo unique: username e emailaddress.

30/01/2018 15:58