Skip to content

Commit cff7d0f

Browse files
committed
Markdown syntax review.
1 parent 5697845 commit cff7d0f

File tree

1 file changed

+17
-7
lines changed

1 file changed

+17
-7
lines changed

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

Lines changed: 17 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ layout: post
33
title: Spring-data-jpa
44
author: jvillanti
55
tags: [resthub, spring-data, QueryDsl]
6+
published: false
67
---
78

89
La préparation [de la version 2 de RESThub](http://pullrequest.org/2011/09/07/resthub-2-preview.html) et l’objectif de remplacer [Hades](http://redmine.synyx.org/) par [Spring-data](http://www.springsource.org/spring-data) nous a emmené à étudier le module spring-data-jpa et ses capacités.
@@ -13,9 +14,11 @@ Le projet [Spring-data](http://www.springsource.org/spring-data) est un projet v
1314
En plus des facilités de manipulation de données offertes par le project, Spring-data supporte le framework [QueryDsl](http://www.querydsl.com/) et ainsi la possibilité de donner [une orientation DDD](http://en.wikipedia.org/wiki/Domain-driven_design) introduit par *Eric Evans* à son travail. Sans rentrant dans les détails, on assiste peut être à la fin de nos modèles métiers anémiques !
1415

1516
## Cas d’utilisation basique
17+
1618
Maintenant on rentre dans le vif du sujet avec un projet exemple montrant les possibilités offertes par Spring-data-jpa.
1719

1820
### 1)Objet domain
21+
1922
@Entity
2023
public class User {
2124
@Id
@@ -26,23 +29,24 @@ Maintenant on rentre dans le vif du sujet avec un projet exemple montrant les po
2629
private String username;
2730

2831
@Column(nullable = false)
29-
private Integer age;
32+
private Integer age;
3033

3134
//Get et Set
3235
}
3336

3437
Ici, Pojo classique pour ne pas dire "anémique". Aucune référence à spring-data n'est nécessaire.
3538

3639
### 2)Repository
40+
3741
public interface UserRepository extends JpaRepository<User, Long> {
38-
User findByUsername(String username);
42+
User findByUsername(String username);
3943
40-
List<User> findByUsernameAndAge(String username, Integer age);
44+
List<User> findByUsernameAndAge(String username, Integer age);
4145
42-
Page<User> findByUsernameLike(String username, Pageable pageable);
46+
Page<User> findByUsernameLike(String username, Pageable pageable);
4347

4448
@Query("SELECT u FROM User u WHERE u.username like ?1")
45-
Page<User> findByUsernameLikeCusom(String username, Pageable pageable);
49+
Page<User> findByUsernameLikeCusom(String username, Pageable pageable);
4650
4751
List<User> findByAgeBetween(Integer min, Integer max);
4852
}
@@ -56,11 +60,13 @@ Pour les autres, plusieurs modes sont disponibles :
5660
A savoir, qu’il est possible de gérer les Pages pour les requêtes qui peuvent ramener beaucoup de résultats.
5761

5862
### 3)Configuration Spring
63+
5964
Il faut juste indiquer à Spring-data-jpa le package ou se trouve vos repositories qu'il doit gérer
6065

6166
<jpa:repositoriesbase-package="fr.test.repository" />
6267

6368
### 4)Tests
69+
6470
Maintenant on passe aux tests unitaires de notre "userRepository"
6571
public class UserRepositoryTest {
6672
@Autowired
@@ -105,6 +111,7 @@ Rien de spécial, on injecte notre repository et on peut ensuite tester toutes l
105111
* les requêtes persos ne sont pas vérifiées avant l’exécution (aie aux tests unitaires oubliés)
106112

107113
## Cas d’utilisation avancé
114+
108115
### 1)Ajouter des comportements au repository
109116

110117
public interface UserRepositoryCustom {
@@ -163,13 +170,15 @@ A savoir qu'il est possible d'ajouter des comportements "par défaut" à tous le
163170
}
164171
//.....
165172
}
173+
166174
Rien de particulier, on teste que notre UserRepository profite bien de la fonction définie dans notre UserRepositoryCustom.
167175

168176
### 2)Utilisation de queryDsl
177+
169178
QueryDsl est un framework qui permet d'écrire des requêtes type-safe dans un langage humainement compréhensible.
170179
Grâce à QueryDsl on va pouvoir supprimer une des limites énoncée dans le 1er bilan et éviter pas mal de surprise à l'éxécution. On va même discrètement rajouter un peu de métier dans autre objet domain.
171-
172-
#### 1er étape : Génération des classes Q*
180+
181+
#### 1er étape : Génération des classes Q\*
173182

174183
Afin de pouvoir utiliser les classes QXXX (ici QUser) il faut les générer. Il existe un plugin Maven dédié à ce travail.
175184

@@ -275,5 +284,6 @@ Ici, on voit le côté DDD et l'ajout de métier dans le modèle.
275284
On peut maintenant utiliser les prédicats prédéfinis pour générer des requêtes.
276285

277286
## 2ème bilan :
287+
278288
* On retrouve biens les concepts d'Hades et la possibilité d'étendre les repositories afin de rajouter des comportements.
279289
* L'utilisation du QueryDsl est vraiment intéressante. On peut fabriquer des requêtes type-safe et dans un langue proche de langage courant et on profite de la complétion!. On évite aussi de rajouter toutes les 5secondes une nouvelle méthode dans le repostitory (cela évite d'avoir plusieurs dizaines findByXXXandYYY, ...).

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy