diff --git a/README.md b/README.md
index dd5c7e2a066cfb5dc25c4e616cdfe8ae6e9dab6b..7a02ca625d8749386bc98a01046cb1ec7e349b33 100644
--- a/README.md
+++ b/README.md
@@ -407,8 +407,7 @@ va falloir introduire la persistence. Pour cela, nous allons utiliser
 la librairie JDBI qui permet d'associer un modèle objet aux tables de
 base de données.
 
-Pour cela nous allons devoir implémenter un DAO (Data Access Object) :
-
+Pour cela nous allons devoir implémenter le DAO (Data Access Object) `IngredientDao` :
 
 	package fr.ulille.iut.pizzaland.dao;
 
@@ -440,4 +439,115 @@ Pour cela nous allons devoir implémenter un DAO (Data Access Object) :
       @SqlQuery("SELECT * FROM ingredients WHERE id = :id")
       @RegisterBeanMapper(Ingredient.class)
       Ingredient findById(long id);
-}
+	}
+
+JDBI fonctionne par annotations :
+  - Les annotations `sqlUpdate` et `SqlQuery` correspondent à des
+  requêtes SQL en modification ou non.
+  - `@GetGeneratedKeys` permet de renvoyer la clé primaire générée par
+  la base de données.
+  - `@RegisterBeanMapper` permet d'associer une classe à un résultat
+  (les champs de la table sont associés aux propriétés du bean).
+  
+Reprenons maintenant le code déjà écrit pour aller chercher les
+ingrédients dans une base de données (nous utiliserons `Sqlite`).
+
+### Les tests avec la base de données
+Nous allons utiliser le DAO pour insérer des données dans la table
+afin de réaliser nos tests. Nous utiliserons une base de données de
+tests qui est définie via la classe `BDDFactory`.
+
+Les méthodes `setEnvUp` et `tearEnvDown` permettent de créer et
+détruire la base de données entre chaque test.
+	
+	import fr.ulille.iut.pizzaland.dao.IngredientDao;
+	
+	public class IngredientResourceTest extends JerseyTest {
+	  private IngredientDao dao;
+	  
+	  @Override
+      protected Application configure() {
+       BDDFactory.setJdbiForTests();
+
+       return new ApiV1();
+    }
+	
+	@Before
+    public void setEnvUp() {
+        dao = BDDFactory.buildDao(IngredientDao.class);
+        dao.createTable();
+    }
+
+    @After
+    public void tearEnvDown() throws Exception {
+       dao.dropTable();
+    }
+	
+	@Test
+    public void testGetExistingIngredient() {
+
+        Ingredient ingredient = new Ingredient();
+        ingredient.setName("Chorizo");
+
+	    long id = dao.insert(ingredient.getName());
+        ingredient.setId(id);
+
+        Response response = target("/ingredients/" + id).request().get();
+
+        assertEquals(Response.Status.OK.getStatusCode(), response.getStatus());
+
+        Ingredient result = Ingredient.fromDto(response.readEntity(IngredientDto.class));
+        assertEquals(ingredient, result);
+    }
+
+### La ressource avec la base de données
+
+	import fr.ulille.iut.pizzaland.BDDFactory;
+	import fr.ulille.iut.pizzaland.dao.IngredientDao;
+	
+	import java.util.stream.Collectors;
+	
+	import javax.ws.rs.WebApplicationException;
+	
+	public class IngredientResource {
+	  private IngredientDao ingredients;
+	  
+	  public IngredientResource() {
+        ingredients = BDDFactory.buildDao(IngredientDao.class);
+        ingredients.createTable();
+      }
+	  
+	  @GET
+      public List<IngredientDto> getAll() {
+        LOGGER.info("IngredientResource:getAll");
+
+        List<IngredientDto> l = ingredients.getAll().stream().map(Ingredient::toDto).collect(Collectors.toList());
+        return l;
+	  }
+
+	  @GET
+      @Path("{id}")
+      public IngredientDto getOneIngredient(@PathParam("id") long id) {
+        LOGGER.info("getOneIngredient(" + id + ")");
+        try {
+            Ingredient ingredient = ingredients.findById(id);
+			return Ingredient.toDto(ingredient);
+        }
+        catch ( Exception e ) {
+			// Cette exception générera une réponse avec une erreur 404
+            throw new WebApplicationException(Response.Status.NOT_FOUND);
+        }
+      }
+	  
+	}
+
+### Les tests fonctionnent avec la base de données
+Nous pouvons maintenant vérifier que la base fonctionne avec la base
+de données :
+
+	mvn test
+	
+	Results :
+
+	Tests run: 2, Failures: 0, Errors: 0, Skipped: 0
+