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-го слоя).
• как работают производные запросы по имени метода и когда нужен `@Query` (если дошёл до 2-го слоя).