Skip to content
Snippets Groups Projects
Commit 8506359f authored by Yvan Peter's avatar Yvan Peter
Browse files

Explication persistance JDBI

parent 8ba44742
Branches
No related tags found
No related merge requests found
...@@ -46,7 +46,7 @@ On peut constater un certain nombre de changements par rapport au TP précédent ...@@ -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 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` 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 : 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`. Dans un terminal, lancez le serveur avec la commande `mvn compile exec:java`.
...@@ -76,3 +76,36 @@ Content-Length: 100 ...@@ -76,3 +76,36 @@ Content-Length: 100
[{"description":"tester la création","id":"4ba24fd7-5856-4678-8f9e-84802e3334dd","nom":"tâche 1"}] [{"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`).
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment