Ce premier TP consiste à utiliser les connaissances du 1er cours sur Spring Boot pour créer une API très simple, manipulant des données venant d'une BdD relationnelle de type H2. Cette base contient 2 tables qui devraient être normalement reliées par une relation one-to-many, grâce à une clef étrangère, mais qui dans ce TP seront reliées "à la main", dont avec des risques d'incohérence. Les TPs suivants consisteront à étoffer cette API et la base, afin d'utiliser un bon modèle relationnel.

1°/ Mise en place

La première étape est de créer le squelette du projet comme dans la démonstration n°2 du TD1, avec les dépendances nécessaires (Spring Web, JPA, H2).

Ensuite, il faut modifier le fichier application.properties afin d'utiliser une BdD de type H2 en mémoire, avec comme nom rpgbd. La base et les tables doivent être créées au lancement de l'application, et seront remplies grâce au fichier data.sql suivant :

INSERT INTO categories (name) VALUES
('helmet'), ('crown'), ('armor'), ('clothes'), ('weapon'),('lighter'), ('purse'),('potion'), ('spell'), ('food');
INSERT INTO rpgitems (name, id_category, price, effect) VALUES 
('conic helmet',1, 200.0, 'A+10'),
('great crown of apologia', 2, 200.0, 'A+20'),
('leather armor', 3, 100.0, 'A+10'),
('hauberk', 3, 500.0, 'A+40'),
('tuxedo', 4, 600.0, 'L+1'),
('unicorn cosplay',  4, 199.99, 'L+10'),
('dagger', 5 , 100.0, 'S+5'),
('long sword', 5 , 300.0, 'S+20'),
('torch', 6, 2.5, ''),
('leather purse', 7, 10.31, ''),
('protection potion', 8, 100.0, 'a+10'),
('fireball', 9, 1000.0, ''),
('ice cone', 9, 1000.0, ''),
('apple', 10, 1.1, 'l+1'),
('wine', 10, 9.75, 'l+2');

2°/ Cahier des charges

2.1°/ Les entités

Pour représenter les 2 tables utilisées dans ce TP, il faut créer deux classes d'entité nommés RpgItem et ItemCategory. La première classe doit être associée à la table nommée rpgitems et la seconde à la table categories.

Chacune de ces classes doit avoir un attribut représentant la clef primaire nommé id. Pour les autres attributs, leur nom et type peuvent être déduit de ce qu'il y a dans le fichier data.sql ci-dessus.

2.2°/ Les repository

Le TP nécessite de créer deux repository pour gérer chacune des tables, nommés ItemCategoryRepository et RpgItemRepository. Les deux héritent de JpaRepository mais seul le deuxième doit déclarer des méthodes supplémentaires pour :

2.3°/ Les services

Le TP nécessite de créer deux services, dont les classes sont nommées ItemCategoryService et RpgItemService

La première classe définit deux méthodes :