Карта / JPA / Hibernate / Repository

Repository

Repository (в Spring Data JPA) — интерфейс, который даёт CRUD-операции “бесплатно”, без единой строчки реализации. Объявил интерфейс — Spring сам создаёт класс, который его реализует.

interface UserRepository extends JpaRepository<User, Long> {   // <Entity, тип Id>
    // всё! методы save(), findById(), findAll(), delete() уже есть
}
@Autowired
UserRepository userRepository;

userRepository.save(new User("Артур", 25));     // INSERT
userRepository.findById(1L);                       // SELECT по id
userRepository.findAll();                           // SELECT всех
userRepository.deleteById(1L);                       // DELETE
Копнуть глубже

Производные запросы (derived queries) — Spring Data умеет генерировать SQL прямо по имени метода, не нужно писать запрос вручную:

interface UserRepository extends JpaRepository<User, Long> {
    List<User> findByCity(String city);                  // WHERE city = ?
    List<User> findByAgeGreaterThan(int age);             // WHERE age > ?
    List<User> findByNameAndCity(String name, String city); // WHERE name = ? AND city = ?
}

Spring разбирает название метода по ключевым словам (findBy, And, GreaterThan, OrderBy…) и сам строит соответствующий запрос — магия, которая экономит десятки строк шаблонного кода.

Когда производных запросов не хватает — пишут собственный JPQL через @Query:

@Query("SELECT u FROM User u WHERE u.age > :minAge AND u.city = :city")
List<User> findAdultsInCity(@Param("minAge") int minAge, @Param("city") String city);
🎤 Закрыл тему, если можешь объяснить:
• что даёт интерфейс `JpaRepository` без написания кода;
• как работают производные запросы по имени метода и когда нужен `@Query` (если дошёл до 2-го слоя).