You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Le travail au niveau du repository se limite à l'écriture de l'interface et c'est Spring-data-jpa qui se charge de faire l'implémentation. Les habitués du framework [Hades](http://redmine.synyx.org/) reconnaitront sans mal ce mode de fonctionnement.
60
-
Pour les autres, plusieurs modes sont disponibles :
59
+
Le travail au niveau du repository se limite à l'écriture de l'interface et c'est spring-data-jpa qui se charge de faire l'implémentation. Les habitués du framework [Hades](http://redmine.synyx.org/) reconnaitront sans mal ce mode de fonctionnement.
60
+
Pour les autres, plusieurs mises en oeuvre sont disponibles :
61
61
62
-
* le framework compose automatiquement les requêtes en se basant sur des mots clés (byXXX, Order, …) (ex : findByUsernameAndAge, ...) [liste de mots clés](http://static.springsource.org/spring-data/data-jpa/docs/1.0.0.RC1/reference/html/#repositories.query-methods.property-expressions)
63
-
* l’utilisateur écrit directement la requête (utilisation de @Query) avec la posibilité d'utiliser des paramètres nommés
62
+
* le framework compose automatiquement les requêtes en se basant sur des mots clés (byXXX, Order, …) (ex : findByUsernameAndAge, ...) [liste de mots clés](http://static.springsource.org/spring-data/data-jpa/docs/1.0.0.RC1/reference/html/#repositories.query-methods.property-expressions).
63
+
* l’utilisateur écrit directement la requête (utilisation de @Query) avec la posibilité d'utiliser des paramètres nommés.
64
64
65
65
A savoir, qu’il est possible de gérer la pagination pour les requêtes qui peuvent ramener beaucoup de résultats.
66
66
67
67
### 3) Configuration Spring
68
68
69
-
Il faut juste indiquer à Spring-data-jpa le package où se trouvent vos repositories qu'il doit gérer :
69
+
Il faut juste indiquer à spring-data-jpa le package où se trouvent vos repositories qu'il doit gérer :
On rajoute à notre repository "UserRepository" un extends sur notre repository UserRepositoryCustom et hop on profite des fonctionnalités de spring-data-jpa en plus celles de notre implémentation spécifique.
167
+
On rajoute à notre repository "UserRepository" un extends sur notre repository UserRepositoryCustom et hop on profite des fonctionnalités de spring-data-jpa en plus de celles de notre implémentation spécifique.
168
168
169
-
A savoir qu'il est possible d'ajouter des comportements "par défaut" à tous les repositories. [(cf la doc de spring-data)](http://static.springsource.org/spring-data/data-jpa/docs/current/reference/html/#repositories.custom-behaviour-for-all-repositories).
169
+
A savoir qu'il est possible d'ajouter des comportements "par défaut" à tous les repositories. [(cf la doc de spring-data)](http://static.springsource.org/spring-data/data-jpa/docs/current/reference/html/#repositories.custom-behaviour-for-all-repositories).
170
170
171
171
{% highlight java %}
172
172
public class UserRepositoryTest {
@@ -188,8 +188,7 @@ Rien de particulier, on teste que notre UserRepository profite bien de la foncti
188
188
189
189
### 2) Utilisation de queryDsl
190
190
191
-
QueryDsl est un framework qui permet d'écrire des requêtes type-safe dans un langage humainement compréhensible.
192
-
Grâce à QueryDsl on va pouvoir supprimer une des limites énoncées dans le 1er bilan et éviter pas mal de surprises à l'exécution. On va même discrètement rajouter un peu de métier dans autre objet domain.
191
+
QueryDsl est un framework qui permet d'écrire des requêtes type-safe via un [Domain Specific Language](http://en.wikipedia.org/wiki/Domain-specific_language) proposant une API fluide (fluent API). Grâce à QueryDsl on va pouvoir supprimer une des limites énoncées dans le 1er bilan et éviter pas mal de surprises à l'exécution. On va même discrètement rajouter un peu de métier dans un autre objet du domain.
193
192
194
193
#### 1ère étape : Génération des classes Q\*
195
194
@@ -257,15 +256,15 @@ public class UserRepositoryTest {
257
256
}
258
257
{% endhighlight %}
259
258
260
-
Et hop, on peut profiter de tout un langage (DSL) pour générer ses requêtes type-safe! [voir la document QueryDsl](http://source.mysema.com/static/querydsl/2.2.0/reference/html). La complétion rajoute vraiment un confort non négligeable.
259
+
Et hop, on peut profiter de tout un langage (DSL) pour générer ses requêtes type-safe! [voir la documentation de QueryDsl](http://source.mysema.com/static/querydsl/2.2.0/reference/html). La complétion rajoute vraiment un confort non négligeable.
261
260
262
261
#### 4ème étape : Création des predicats
263
262
264
263
{% highlight java %}
265
264
public class UserPredicates {
266
265
267
-
public static BooleanExpression isMinor() {
268
-
return QUser.user.age.lt(18);
266
+
public static BooleanExpression isMinor() {
267
+
return QUser.user.age.lt(18);
269
268
}
270
269
}
271
270
{% endhighlight %}
@@ -296,5 +295,5 @@ On peut maintenant utiliser les prédicats prédéfinis pour générer des requ
296
295
## 2ème bilan :
297
296
298
297
* On retrouve bien les concepts d'Hades et la possibilité d'étendre les repositories afin de rajouter des méthodes spécifiques.
299
-
* L'utilisation du QueryDsl est vraiment intéressante. On peut fabriquer des requêtes type-safe et dans un langue proche du langage courant et on profite de la complétion ! On évite aussi de rajouter toutes les 5 secondes une nouvelle méthode dans le repostitory (cela évite d'avoir plusieurs dizaines findByXXXandYYY, ...).
298
+
* L'utilisation du QueryDsl est vraiment intéressante. On peut fabriquer des requêtes type-safe et dans un langue proche du langage courant et on profite de la complétion !
0 commit comments