Référentiels Spring Data et méthodes de requête
Étendez JpaRepository, définissez des méthodes de requête selon les conventions de nommage et utilisez @Query pour du JPQL personnalisé.
Référentiels Spring Data et méthodes de requête est une leçon Java Academy gratuite sur CoddyKit. Ceci est la leçon 2 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage Java Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours Java Academy comprend 4 leçons au total.
Dépôts Spring Data JPA
Étendez JpaRepository<Entity, ID> pour obtenir gratuitement des méthodes de création, lecture, mise à jour, pagination et tri. Spring génère l’implémentation au démarrage — aucun SQL ni code répétitif de DAO n’est nécessaire.
public interface UserRepository extends JpaRepository<User, Long> {
// Free: findAll, findById, save, delete, count, existsById, etc.
}Méthodes de requête dérivées
Spring Data génère les requêtes à partir des noms de méthodes. La convention de nommage est la suivante : findBy + propriété + conditions facultatives.
public interface UserRepository extends JpaRepository<User, Long> {
List<User> findByStatus(UserStatus status);
Optional<User> findByEmail(String email);
List<User> findByAgeGreaterThanAndStatusOrderByNameAsc(int age, UserStatus s);
boolean existsByEmail(String email);
long countByStatus(UserStatus status);
}Mots-clés pris en charge dans les noms de méthodes
Principaux mots-clés de nommage : And, Or, Is/Equals, Between, LessThan/GreaterThan, Like/NotLike, In/NotIn, IsNull/IsNotNull, OrderBy, First/Top.
List<User> findTop5ByStatusOrderByCreatedAtDesc(UserStatus s);
List<User> findByNameContainingIgnoreCase(String fragment);
List<User> findByCreatedAtBetween(LocalDateTime from, LocalDateTime to);@Query pour le JPQL personnalisé
Utilisez @Query pour les requêtes complexes qui ne peuvent pas être exprimées sous forme de noms de méthodes. JPQL utilise les noms des classes d’entités et des champs, et non les noms des tables et des colonnes.
@Query("SELECT u FROM User u WHERE u.email = :email AND u.status = :status")
Optional<User> findActiveByEmail(@Param("email") String email,
@Param("status") UserStatus status);
@Query("SELECT u.name, COUNT(o) FROM User u JOIN u.orders o GROUP BY u.name")
List<Object[]> countOrdersPerUser();Requêtes natives
Utilisez nativeQuery = true pour écrire du SQL brut. Cette option est utile pour les fonctionnalités propres à une base de données, comme ON CONFLICT, les fonctions de fenêtrage ou la recherche en texte intégral.
@Query(value = "SELECT * FROM users WHERE tsv @@ plainto_tsquery(:q)",
nativeQuery = true)
List<User> fullTextSearch(@Param("q") String query);Requêtes de modification avec @Modifying
Annotez les requêtes de mise à jour ou de suppression avec @Modifying. Ajoutez @Transactional, car les requêtes de modification nécessitent une transaction active.
@Modifying
@Transactional
@Query("UPDATE User u SET u.status = :s WHERE u.lastLogin < :cutoff")
int deactivateInactiveUsers(@Param("s") UserStatus s,
@Param("cutoff") LocalDateTime cutoff);Méthodes de suppression dérivées
Spring Data génère également des requêtes de suppression à partir des noms de méthodes — ce qui est pratique pour les opérations de nettoyage.
void deleteByStatus(UserStatus status);
long deleteByCreatedAtBefore(LocalDateTime cutoff);Interfaces de dépôt : CrudRepository, PagingAndSortingRepository
Utilisez des interfaces de base plus ciblées lorsque vous n’avez pas besoin de toutes les méthodes de JpaRepository. CrudRepository fournit les opérations de base ; PagingAndSortingRepository ajoute findAll(Pageable).
public interface ReadOnlyUserRepository extends PagingAndSortingRepository<User, Long> {
// Only paging + sorting — no save/delete
}@EntityGraph pour optimiser le chargement
Utilisez @EntityGraph pour remplacer la stratégie de chargement par défaut pour une requête donnée et charger les associations immédiatement, sans modifier la correspondance de l’entité.
@EntityGraph(attributePaths = {"orders", "orders.items"})
@Query("SELECT u FROM User u WHERE u.id = :id")
Optional<User> findWithOrders(@Param("id") Long id);Implémentations personnalisées de dépôts
Ajoutez une méthode personnalisée en créant une interface et une classe d’implémentation selon la convention de nommage UserRepositoryCustom + UserRepositoryCustomImpl. Spring les fusionne.
public interface UserRepositoryCustom {
List<User> searchByCriteria(UserSearchCriteria criteria);
}
public class UserRepositoryCustomImpl implements UserRepositoryCustom {
@PersistenceContext EntityManager em;
public List<User> searchByCriteria(UserSearchCriteria c) {
// use Criteria API or JdbcTemplate
}
}
public interface UserRepository extends JpaRepository<User,Long>, UserRepositoryCustom {}Vérification rapide
Quelle annotation est requise avec @Query pour les instructions UPDATE/DELETE ?
Récapitulatif
Étendez JpaRepository pour obtenir gratuitement les opérations de base. Utilisez les noms de méthodes dérivés pour les requêtes simples. Utilisez @Query pour le JPQL complexe ou le SQL natif. Utilisez @Modifying+@Transactional pour les mises à jour. Utilisez @EntityGraph pour ajuster le chargement.
Questions Fréquemment Posées
La leçon « Référentiels Spring Data et méthodes de requête » est-elle gratuite ?
Oui — le texte complet de « Référentiels Spring Data et méthodes de requête » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours Java Academy, passe à CoddyKit PRO. Le cours Java Academy comprend 4 leçons au total.
Qu'est-ce que j'apprendrai dans « Référentiels Spring Data et méthodes de requête » ?
Étendez JpaRepository, définissez des méthodes de requête selon les conventions de nommage et utilisez @Query pour du JPQL personnalisé. Tu pratiques Java Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.
Dois-je avoir de l'expérience pour commencer Java Academy ?
Aucune expérience préalable n'est requise. Java Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 2 sur 4.
Combien de temps prend la leçon « Référentiels Spring Data et méthodes de requête » ?
La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.
Peux-tu écrire et exécuter du code dans cette leçon Java Academy ?
Oui. Chaque leçon Java Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.
Toutes les leçons de ce cours
- Mappage des entités avec les annotations JPA
- Référentiels Spring Data et méthodes de requête
- Relations One-to-Many et Many-to-Many
- Pagination, tri et projections