Ressources

Spring Data JPA agit comme une couche au-dessus de JPA et vous offre deux façons de dĂ©finir votre requĂȘte :

  • Vous pouvez laisser Spring Data JPA dĂ©river la requĂȘte Ă  partir du nom d’une mĂ©thode.
  • Vous pouvez dĂ©finir votre propre requĂȘte JPQL ou native en utilisant une annotation @Query

Depuis une méthode

Supposons une classe Produit qui dispose du champs nom et puis nous définissons la méthode suivante

public interface ProduitRepository extends JpaRepository<Produit, Long> {
    List<Produit> findByNom(String nom);
}

Spring Data JPA implémente automatiquement cette méthode sans aucune écriture SQL manuelle en

SELECT * FROM produit WHERE nom = :nom

Respecter les conventions

Nous devons juste prĂȘter garde Ă  respecter les conventions dĂ©finies par Spring Data JPA, disponible ici

KeywordSQL EquivalentExempleSQL Généré
AndANDfindByNomAndPrixWHERE nom = ? AND prix = ?
OrORfindByNomOrCategorieWHERE nom = ? OR categorie = ?
BetweenBETWEENfindByPrixBetweenWHERE prix BETWEEN ? AND ?
LessThan<findByPrixLessThanWHERE prix < ?
GreaterThan>findByPrixGreaterThanWHERE prix > ?
LikeLIKEfindByNomLikeWHERE nom LIKE ?
NotLikeNOT LIKEfindByNomNotLikeWHERE nom NOT LIKE ?
IsNullIS NULLfindByDescriptionIsNullWHERE description IS NULL
IsNotNullIS NOT NULLfindByDescriptionIsNotNullWHERE description IS NOT NULL
OrderByORDER BYfindByCategorieOrderByNomAscORDER BY nom ASC

Depuis @Query

public interface UserRepository extends JpaRepository<User, Long> {
 
  @Query("select u from User u where u.emailAddress = ?1")
  User findByEmailAddress(String emailAddress);
}

Utilisation du LIKE

public interface UserRepository extends JpaRepository<User, Long> {
 
  @Query("select u from User u where u.firstname like %?1")
  List<User> findByFirstnameEndsWith(String firstname);
}