diff --git a/README.md b/README.md index 7c460a86fbb7627174d898b44e1cfa9fdfe15689..65c2f116d20c1804bc110c10272ad1ba33fa6d13 100644 --- a/README.md +++ b/README.md @@ -46,7 +46,7 @@ On peut constater un certain nombre de changements par rapport au TP précédent 3. Une classe `BDDFactory` est fournie qui gère la connexion à la base de donnée 4. La configuration de l'affichage des logs est maintenant géré par un fichier de configuration externe `logging.properties` -## Un petit test manuel pour démarrer... +## Test manuel et découverte du code Avant de commencer à compléter le code fournit, nous allons tester un petit peu : Dans un terminal, lancez le serveur avec la commande `mvn compile exec:java`. @@ -76,3 +76,36 @@ Content-Length: 100 [{"description":"tester la création","id":"4ba24fd7-5856-4678-8f9e-84802e3334dd","nom":"tâche 1"}] ~~~ + +On peut également vérifier la présence de nos données dans la base de données (̀ sqlite`) : + +~~~ +$ sqlite3 /tmp/peter_todo.db +SQLite version 3.33.0 2020-08-14 13:23:32 +Enter ".help" for usage hints. +sqlite> select * from taches; +4ba24fd7-5856-4678-8f9e-84802e3334dd|tâche 1|tester la création +~~~ + +Les opérations de manipulation de la table `taches` sont définies dans la classe `TacheDAO` avec des annotations (JDBI)[https://jdbi.org/#_sql_objects] : + +~~~java +public interface TacheDAO { + @SqlUpdate("create table if not exists taches (id varchar(128) primary key, nom varchar not null, description varchar)") + void createTable(); + + @SqlUpdate("drop table if exists taches") + void dropTable(); + + @SqlUpdate("insert into taches (id, nom, description) values (:id, :nom, :description)") + int insert(@BindBean Tache tache); + + @SqlQuery("select * from taches") + @RegisterBeanMapper(Tache.class) + List<Tache> getAll(); +} +~~~ + +Ce DAO est utilisé dans la classe `Tache` qui représente une tâche particulière. Les tâches sont manipulées via la classe `TodoService`. + +Si vous regardez le code de la classe `Tache`, vous constaterez que nous avons choisi d'identifier les tâches au moyen un identifiant unique ((UUID)[https://fr.wikipedia.org/wiki/Universally_unique_identifier]). Comme ce type n'est pas géré nativement par JDBI, nous avons dû utiliser une (mécanisme d'extension)[https://jdbi.org/#_custom_arguments] permettant la conversion entre le type `java.util.UUID` et `String` (classes `UUIDArgument` et `UUIDArgumentFactory`).