Skip to content

Commit 60f3a9e

Browse files
committed
Dernière relecture de l'article Spring Data JPA.
1 parent 67d8e01 commit 60f3a9e

File tree

1 file changed

+14
-15
lines changed

1 file changed

+14
-15
lines changed

_posts/2011-10-12-spring-data-jpa.markdown

Lines changed: 14 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ public class User {
3333
@Column(nullable = false)
3434
private Integer age;
3535

36-
//Get et Set
36+
// Getters et Setters
3737
}
3838
{% endhighlight %}
3939

@@ -56,17 +56,17 @@ public interface UserRepository extends JpaRepository<User, Long> {
5656
}
5757
{% endhighlight %}
5858

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 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 :
6161

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.
6464

6565
A savoir, qu’il est possible de gérer la pagination pour les requêtes qui peuvent ramener beaucoup de résultats.
6666

6767
### 3) Configuration Spring
6868

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 :
7070

7171
{% highlight xml %}
7272
<jpa:repositories base-package="fr.test.repository" />
@@ -115,7 +115,7 @@ Rien de spécial, on injecte notre repository et on peut ensuite tester toutes l
115115
* le mode implémentation automatique permet de gagner du temps dans les petits développements.
116116

117117
* Inconvénients :
118-
* les interfaces peuvent vite devenir confuses avec des FindByXXXandYYY, FindByXXXAndYYYOrderBy, ...
118+
* les interfaces peuvent vite devenir confuses avec des FindByXXXAndYYY, FindByXXXAndYYYOrderBy, ...
119119

120120
## Cas d’utilisation avancé
121121

@@ -164,9 +164,9 @@ public interface UserRepository extends JpaRepository<User, Long>, UserRepositor
164164
}
165165
{% endhighlight %}
166166

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 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.
168168

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).
170170

171171
{% highlight java %}
172172
public class UserRepositoryTest {
@@ -188,8 +188,7 @@ Rien de particulier, on teste que notre UserRepository profite bien de la foncti
188188

189189
### 2) Utilisation de queryDsl
190190

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.
193192

194193
#### 1ère étape : Génération des classes Q\*
195194

@@ -257,15 +256,15 @@ public class UserRepositoryTest {
257256
}
258257
{% endhighlight %}
259258

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.
261260

262261
#### 4ème étape : Création des predicats
263262

264263
{% highlight java %}
265264
public class UserPredicates {
266265

267-
public static BooleanExpression isMinor() {
268-
return QUser.user.age.lt(18);
266+
public static BooleanExpression isMinor() {
267+
return QUser.user.age.lt(18);
269268
}
270269
}
271270
{% endhighlight %}
@@ -296,5 +295,5 @@ On peut maintenant utiliser les prédicats prédéfinis pour générer des requ
296295
## 2ème bilan :
297296

298297
* 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 !
300299

0 commit comments

Comments
 (0)