Spring Boot con Hibernate

1. Panoramica

In questo articolo, daremo un'occhiata a come utilizzare Spring Boot con Hibernate.

Costruiremo una semplice applicazione Spring Boot e vedremo quanto è facile integrarla con Hibernate.

2. Avvio dell'applicazione

Useremo Spring Initializr per avviare la nostra applicazione Spring Boot. Per questo esempio, utilizzeremo solo le configurazioni e le dipendenze necessarie per integrare Hibernate, aggiungendo dipendenze Web , JPA e H2 . Spiegheremo queste dipendenze nella prossima sezione.

Generiamo il progetto e apriamolo nel nostro IDE. Possiamo controllare la struttura del progetto generato e identificare i file di configurazione di cui avremo bisogno.

Ecco come apparirà la struttura del progetto:

3. Dipendenze di Maven

Se apriamo pom.xml , vedremo che abbiamo spring-boot-starter-web e spring-boot-starter-test come dipendenze maven. Come suggeriscono i loro nomi, queste stanno avviando dipendenze in Spring Boot.

Diamo una rapida occhiata alla dipendenza che attira JPA:

 org.springframework.boot spring-boot-starter-data-jpa 

Questa dipendenza include API JPA, implementazione JPA, JDBC e altre librerie necessarie. Poiché l'implementazione JPA predefinita è Hibernate, questa dipendenza è in realtà sufficiente per introdurla.

Infine, useremo H2 come database molto leggero per questo esempio:

 com.h2database h2 runtime 

Possiamo usare la console H2 per verificare che il DB sia attivo e funzionante, anche per una GUI user-friendly per il nostro inserimento dati. Andiamo avanti e abilitiamolo in application.properites :

spring.h2.console.enabled=true

Questo è tutto ciò di cui avevamo bisogno per configurare per includere Hibernate e H2 per il nostro esempio. Possiamo verificare che la configurazione sia andata a buon fine sui log all'avvio dell'applicazione Spring Boot:

HHH000412: Hibernate Core {#Version}

HHH000206: hibernate.properties non trovato

HCANN000001: Annotazioni Hibernate Commons {#Version}

HHH000400: Uso del dialetto: org.hibernate.dialect.H2Dialect

Ora possiamo accedere alla console H2 su localhost: // localhost: 8080 / h2-console / .

4. Creazione dell'entità

Per verificare che il nostro H2 funzioni correttamente, creeremo prima un'entità JPA in una nuova cartella dei modelli :

@Entity public class Book { @Id @GeneratedValue private Long id; private String name; // standard constructors // standard getters and setters }

Ora abbiamo un'entità di base, dalla quale H2 può creare una tabella. Riavviando l'applicazione e controllando la console H2, verrà creata una nuova tabella chiamata Book .

Per aggiungere alcuni dati iniziali alla nostra applicazione, dobbiamo creare un nuovo file SQL, con alcune istruzioni di inserimento e metterlo nella nostra cartella delle risorse . Possiamo usare i file import.sql (supporto Hibernate) o data.sql (supporto Spring JDBC) per caricare i dati.

Ecco i nostri dati di esempio:

insert into book values(1, 'The Tartar Steppe'); insert into book values(2, 'Poem Strip'); insert into book values(3, 'Restless Nights: Selected Stories of Dino Buzzati');

Di nuovo, possiamo riavviare l'applicazione Spring Boot e controllare la console H2: i dati sono ora nella tabella Book .

5. Creazione del repository e del servizio

Continueremo a creare i componenti di base per testare la nostra applicazione. Innanzitutto, aggiungiamo il repository JPA in una nuova cartella di repository :

@Repository public interface BookRepository extends JpaRepository { }

Possiamo usare l' interfaccia JpaRepository dal framework Spring, che fornisce un'implementazione predefinita per le operazioni CRUD di base .

Successivamente, aggiungiamo BookService in una nuova cartella dei servizi :

@Service public class BookService { @Autowired private BookRepository bookRepository; public List list() { return bookRepository.findAll(); } }

Per testare la nostra applicazione, dobbiamo verificare che i dati creati possano essere recuperati dal metodo list () del servizio.

Scriveremo il seguente SpringBootTest :

@RunWith(SpringRunner.class) @SpringBootTest public class BookServiceUnitTest { @Autowired private BookService bookService; @Test public void whenApplicationStarts_thenHibernateCreatesInitialRecords() { List books = bookService.list(); Assert.assertEquals(books.size(), 3); } }

Eseguendo questo test, possiamo verificare che Hibernate crei i dati del Libro che vengono poi recuperati con successo dal nostro servizio. Ecco fatto, Hibernate funziona con Spring Boot.

6. Nome tabella maiuscolo

A volte potremmo aver bisogno di avere i nomi delle tabelle nel nostro database scritti in lettere maiuscole. Come già sappiamo, per impostazione predefinita Hibernate genererà i nomi delle tabelle in lettere minuscole .

Potremmo anche provare a impostare esplicitamente il nome della tabella, in questo modo:

@Entity(name="BOOK") public class Book { // members, standard getters and setters }

Tuttavia, non funzionerebbe. Ciò che funziona è impostare questa proprietà in application.properties :

spring.jpa.hibernate.naming.physical-strategy=org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl

Di conseguenza, possiamo controllare nel nostro database che le tabelle siano state create correttamente con lettere maiuscole.

7. Conclusione

In questo articolo, abbiamo esaminato quanto sia facile integrare Hibernate con Spring Boot. Abbiamo utilizzato il database H2, come una soluzione in memoria molto leggera.

Abbiamo fornito un esempio completo di un'applicazione che utilizza tutte queste tecnologie e alla fine abbiamo anche fornito un piccolo suggerimento su come impostare i nomi delle tabelle in maiuscolo nel nostro database.

Come sempre, tutti gli snippet di codice menzionati in questo articolo possono essere trovati nel nostro repository GitHub.