0Pricing
Java Academy · Lezione

Repository Spring Data e metodi di query

Estenda JpaRepository, definisca i metodi di query secondo le convenzioni di denominazione e utilizzi @Query per JPQL personalizzato.

Repository Spring Data e metodi di query è una lezione Java Academy gratuita su CoddyKit. Questa è la lezione 2 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento Java Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso Java Academy include 4 lezioni in totale.

Repository Spring Data JPA

Estenda JpaRepository<Entity, ID> per ottenere gratuitamente metodi CRUD, di paginazione e di ordinamento. Spring genera l'implementazione all'avvio: non sono necessari SQL né codice boilerplate per i DAO.

public interface UserRepository extends JpaRepository<User, Long> {
    // Free: findAll, findById, save, delete, count, existsById, etc.
}

Metodi di query derivati

Spring Data genera le query a partire dai nomi dei metodi. La convenzione di denominazione segue questo schema: findBy + proprietà + condizioni facoltative.

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);
}

Keyword supportate nei nomi dei metodi

Keyword principali per i nomi: 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 per JPQL personalizzato

Utilizzi @Query per le query complesse che non possono essere espresse tramite i nomi dei metodi. JPQL usa i nomi delle classi entità e dei campi, non i nomi delle tabelle o delle colonne.

@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();

Query native

Utilizzi nativeQuery = true per scrivere SQL puro. È utile per funzionalità specifiche del database come ON CONFLICT, le funzioni window o la ricerca full-text.

@Query(value = "SELECT * FROM users WHERE tsv @@ plainto_tsquery(:q)",
       nativeQuery = true)
List<User> fullTextSearch(@Param("q") String query);

Query di modifica con @Modifying

Annoti le query di aggiornamento o eliminazione con @Modifying. Aggiunga @Transactional, poiché le query di modifica richiedono una transazione attiva.

@Modifying
@Transactional
@Query("UPDATE User u SET u.status = :s WHERE u.lastLogin < :cutoff")
int deactivateInactiveUsers(@Param("s") UserStatus s,
                             @Param("cutoff") LocalDateTime cutoff);

Metodi di eliminazione derivati

Spring Data genera query di eliminazione anche a partire dai nomi dei metodi: è utile per le operazioni di pulizia.

void deleteByStatus(UserStatus status);
long deleteByCreatedAtBefore(LocalDateTime cutoff);

Sottoinsiemi di repository: CrudRepository, PagingAndSortingRepository

Utilizzi interfacce base più ristrette quando non sono necessari tutti i metodi di JpaRepository. CrudRepository offre le operazioni CRUD di base; PagingAndSortingRepository aggiunge findAll(Pageable).

public interface ReadOnlyUserRepository extends PagingAndSortingRepository<User, Long> {
    // Only paging + sorting — no save/delete
}

@EntityGraph per ottimizzare il caricamento

Utilizzi @EntityGraph per sovrascrivere la strategia di caricamento predefinita per una singola query e caricare eager le associazioni senza modificare il mapping dell'entità.

@EntityGraph(attributePaths = {"orders", "orders.items"})
@Query("SELECT u FROM User u WHERE u.id = :id")
Optional<User> findWithOrders(@Param("id") Long id);

Implementazioni personalizzate dei repository

Aggiunga un metodo personalizzato creando un'interfaccia e una classe di implementazione secondo la convenzione di denominazione UserRepositoryCustom + UserRepositoryCustomImpl. Spring le unisce.

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 {}

Verifica rapida

Quale annotazione è necessaria insieme a @Query per le istruzioni UPDATE/DELETE?

Riepilogo

Estenda JpaRepository per ottenere gratuitamente le operazioni CRUD. Utilizzi i nomi dei metodi derivati per le query semplici. Utilizzi @Query per JPQL complesso o SQL nativo. Utilizzi @Modifying+@Transactional per gli aggiornamenti e @EntityGraph per ottimizzare il caricamento.

Domande Frequenti

La lezione «Repository Spring Data e metodi di query» è gratuita?

Sì — il testo completo di «Repository Spring Data e metodi di query» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso Java Academy, passa a CoddyKit PRO. Il corso Java Academy include 4 lezioni in totale.

Cosa imparerò in «Repository Spring Data e metodi di query»?

Estenda JpaRepository, definisca i metodi di query secondo le convenzioni di denominazione e utilizzi @Query per JPQL personalizzato. Eserciti Java Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.

Ho bisogno di esperienza per iniziare Java Academy?

Non è richiesta alcuna esperienza precedente. Java Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 2 di 4.

Quanto tempo richiede la lezione «Repository Spring Data e metodi di query»?

La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.

Posso scrivere ed eseguire codice in questa lezione Java Academy?

Sì. Ogni lezione Java Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.

Tutte le lezioni di questo corso

  1. Mappatura delle entità con le annotazioni JPA
  2. Repository Spring Data e metodi di query
  3. Relazioni uno-a-molti e molti-a-molti
  4. Paginazione, ordinamento e proiezioni
← Torna a Java Academy