0Pricing
Java Academy · Lección

Repositorios de Spring Data y métodos de consulta

Extienda JpaRepository, defina métodos de consulta mediante convenciones de nombres y use @Query para JPQL personalizado.

Repositorios de Spring Data y métodos de consulta es una lección gratuita de Java Academy en CoddyKit. Esta es la lección 2 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de Java Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Java Academy incluye 4 lecciones en total.

Repositorios de Spring Data JPA

Extienda JpaRepository<Entity, ID> para obtener métodos CRUD, de paginación y de ordenación sin coste adicional. Spring genera la implementación al iniciar la aplicación, sin necesidad de SQL ni código repetitivo de DAO.

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

Métodos de consulta derivados

Spring Data genera consultas a partir de los nombres de los métodos. La convención de nombres sigue este patrón: findBy + propiedad + condiciones opcionales.

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

Palabras clave compatibles en los nombres de métodos

Palabras clave principales para los nombres: 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 para JPQL personalizado

Use @Query para consultas complejas que no se pueden expresar como nombres de métodos. JPQL utiliza los nombres de las clases de entidad y sus campos, no los nombres de tablas y columnas.

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

Consultas nativas

Use nativeQuery = true para escribir SQL sin procesar. Resulta útil para funciones específicas de la base de datos, como ON CONFLICT, las funciones de ventana o la búsqueda de texto completo.

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

Consultas de modificación con @Modifying

Anote las consultas de actualización y eliminación con @Modifying. Añada @Transactional, ya que las consultas de modificación requieren una transacción activa.

@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étodos de eliminación derivados

Spring Data también genera consultas de eliminación a partir de los nombres de los métodos, lo que resulta práctico para las operaciones de limpieza.

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

Interfaces de repositorio: CrudRepository, PagingAndSortingRepository

Use interfaces base más limitadas cuando no necesite todos los métodos de JpaRepository. CrudRepository ofrece operaciones CRUD básicas; PagingAndSortingRepository añade findAll(Pageable).

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

@EntityGraph para optimizar la carga

Use @EntityGraph para reemplazar la estrategia de carga predeterminada por consulta y cargar las relaciones de forma eager sin cambiar el mapeo de la entidad.

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

Implementaciones personalizadas de repositorios

Añada un método personalizado creando una interfaz y una clase de implementación según la convención de nombres UserRepositoryCustom + UserRepositoryCustomImpl. Spring las combina.

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

Comprobación rápida

¿Qué anotación se requiere junto con @Query para las instrucciones UPDATE/DELETE?

Resumen

Extienda JpaRepository para obtener operaciones CRUD sin coste adicional. Use nombres de métodos derivados para consultas sencillas. Use @Query para JPQL complejo o SQL nativo. Use @Modifying+@Transactional para las actualizaciones. Use @EntityGraph para ajustar la carga.

Preguntas frecuentes

¿La lección «Repositorios de Spring Data y métodos de consulta» es gratis?

Sí — el texto completo de «Repositorios de Spring Data y métodos de consulta» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de Java Academy, actualiza a CoddyKit PRO. El curso de Java Academy incluye 4 lecciones en total.

¿Qué aprenderé en «Repositorios de Spring Data y métodos de consulta»?

Extienda JpaRepository, defina métodos de consulta mediante convenciones de nombres y use @Query para JPQL personalizado. Practicas Java Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.

¿Necesito experiencia previa para empezar Java Academy?

No se requiere experiencia previa. Java Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 2 de 4.

¿Cuánto tiempo toma la lección «Repositorios de Spring Data y métodos de consulta»?

La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.

¿Puedo escribir y ejecutar código en esta lección de Java Academy?

Sí. Cada lección de Java Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.

Todas las lecciones de este curso

  1. Mapeo de entidades con anotaciones JPA
  2. Repositorios de Spring Data y métodos de consulta
  3. Relaciones uno a muchos y muchos a muchos
  4. Paginación, ordenación y proyecciones
← Volver a Java Academy