Spring Boot avec Hibernate

1. Vue d'ensemble

Dans cet article, nous verrons comment utiliser Spring Boot avec Hibernate.

Nous allons créer une application Spring Boot simple et voir à quel point il est facile de l'intégrer à Hibernate.

2. Démarrage de l'application

Nous utiliserons Spring Initializr pour démarrer notre application Spring Boot. Pour cet exemple, nous n'utiliserons que les configurations et dépendances nécessaires pour intégrer Hibernate, en ajoutant des dépendances Web , JPA et H2 . Nous expliquerons ces dépendances dans la section suivante.

Générons le projet et ouvrons-le dans notre IDE. Nous pouvons vérifier la structure du projet généré et identifier les fichiers de configuration dont nous aurons besoin.

Voici à quoi ressemblera la structure du projet:

3. Dépendances de Maven

Si nous ouvrons pom.xml , nous verrons que nous avons spring-boot-starter-web et spring-boot-starter-test comme dépendances maven. Comme leur nom l'indique, ce sont des dépendances de démarrage dans Spring Boot.

Jetons un coup d'œil à la dépendance qui tire JPA:

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

Cette dépendance inclut l'API JPA, l'implémentation JPA, JDBC et d'autres bibliothèques nécessaires. Puisque l'implémentation JPA par défaut est Hibernate, cette dépendance est en fait suffisante pour l'introduire également.

Enfin, nous utiliserons H2 comme base de données très légère pour cet exemple:

 com.h2database h2 runtime 

Nous pouvons utiliser la console H2 pour vérifier que le DB est opérationnel, également pour une interface graphique conviviale pour notre saisie de données. Allons-y et activez-le dans application.properites :

spring.h2.console.enabled=true

C'est tout ce dont nous avions besoin pour configurer pour inclure Hibernate et H2 pour notre exemple. Nous pouvons vérifier que la configuration a réussi sur les journaux lorsque nous démarrons l'application Spring Boot:

HHH000412: Hibernate Core {#Version}

HHH000206: hibernate.properties introuvable

HCANN000001: Annotations Hibernate Commons {#Version}

HHH000400: Utilisation du dialecte: org.hibernate.dialect.H2Dialect

Nous pouvons maintenant accéder à la console H2 sur localhost: // localhost: 8080 / h2-console / .

4. Création de l'entité

Pour vérifier que notre H2 fonctionne correctement, nous allons d'abord créer une entité JPA dans un nouveau dossier de modèles :

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

Nous avons maintenant une entité de base, à partir de laquelle H2 peut créer une table. En redémarrant l'application et en vérifiant la console H2, une nouvelle table appelée Book sera créée.

Pour ajouter des données initiales à notre application, nous devons créer un nouveau fichier SQL, avec quelques instructions d'insertion et le mettre dans notre dossier de ressources . Nous pouvons utiliser des fichiers import.sql (support Hibernate) ou data.sql (support Spring JDBC) pour charger des données.

Voici nos exemples de données:

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');

Encore une fois, nous pouvons redémarrer l'application Spring Boot et vérifier la console H2 - les données sont maintenant dans la table Book .

5. Création du référentiel et du service

Nous continuerons à créer les composants de base afin de tester notre application. Tout d'abord, ajoutons le référentiel JPA dans un nouveau dossier de référentiels :

@Repository public interface BookRepository extends JpaRepository { }

Nous pouvons utiliser l' interface JpaRepository du framework Spring, qui fournit une implémentation par défaut pour les opérations CRUD de base .

Ensuite, ajoutons le BookService dans un nouveau dossier de services :

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

Pour tester notre application, nous devons vérifier que les données créées peuvent être récupérées à partir de la méthode list () du service.

Nous écrirons le SpringBootTest suivant :

@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); } }

En exécutant ce test, nous pouvons vérifier qu'Hibernate crée les données du livre qui sont ensuite récupérées avec succès par notre service. Voilà, Hibernate fonctionne avec Spring Boot.

6. Nom de la table en majuscules

Parfois, nous pouvons avoir besoin que les noms de table de notre base de données soient écrits en majuscules. Comme nous le savons déjà, Hibernate générera par défaut les noms des tables en lettres minuscules .

Nous pourrions également essayer de définir explicitement le nom de la table, comme ceci:

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

Cependant, cela ne fonctionnerait pas. Ce qui fonctionne, c'est la définition de cette propriété dans application.properties :

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

En conséquence, nous pouvons vérifier dans notre base de données que les tables sont créées avec succès avec des lettres majuscules.

7. Conclusion

Dans cet article, nous avons examiné à quel point il est facile d'intégrer Hibernate à Spring Boot. Nous avons utilisé la base de données H2, comme solution en mémoire très légère.

Nous avons donné un exemple complet d'une application, qui utilise toutes ces technologies et finalement, nous avons également donné un petit indice sur la façon de définir les noms de table en majuscules dans notre base de données.

Comme toujours, tous les extraits de code mentionnés dans cet article se trouvent sur notre référentiel GitHub.