Start here. This is the direct spoken answer to practice first.
Overview
Spring Data removes repository boilerplate; it does not make every query belong in a long method name.
I use derived query methods for small, obvious predicates and standard CRUD behavior. I use @Query when a fixed JPQL or native query states the intent more clearly. Interface, record, or constructor projections are useful for read models that need only selected fields. When a query needs dynamic composition, provider-specific APIs, or substantial implementation logic, I add a custom repository fragment or a focused query service.