Что такое CrudRepository в Spring Data и для чего он используется?

«Что такое CrudRepository в Spring Data и для чего он используется?» — вопрос из категории Spring, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

CrudRepository<T, ID> — это центральный интерфейс Spring Data, предоставляющий готовые CRUD-операции (Create, Read, Update, Delete) для работы с сущностью типа T и идентификатором типа ID в репозитории. Он является родительским для более специализированных интерфейсов, таких как JpaRepository или MongoRepository.

Для чего используется:

  • Сокращение шаблонного кода. Избавляет разработчика от необходимости писать базовую реализацию репозитория.
  • Стандартизация. Предоставляет унифицированный набор методов для доступа к данным.
  • Интеграция. Легко интегрируется с различными системами хранения данных (JPA, MongoDB, Cassandra и др.) через соответствующие модули Spring Data.

Ключевые методы, объявленные в CrudRepository:

<S extends T> S save(S entity);           // Сохраняет или обновляет сущность
Optional<T> findById(ID id);              // Находит сущность по ID
Iterable<T> findAll();                    // Возвращает все сущности
long count();                             // Возвращает количество сущностей
void delete(T entity);                    // Удаляет сущность
void deleteById(ID id);                   // Удаляет сущность по ID
boolean existsById(ID id);                // Проверяет существование сущности по ID
// ... и другие

Пример использования:

// 1. Объявление репозитория (Spring создаст реализацию автоматически)
public interface UserRepository extends CrudRepository<User, Long> {
    // Можно объявить дополнительные методы по именам или @Query
    List<User> findByLastName(String lastName);
}

// 2. Использование в сервисе
@Service
public class UserService {
    @Autowired
    private UserRepository userRepository;

    public User createUser(User user) {
        return userRepository.save(user); // Используем готовый метод save
    }

    public Optional<User> getUser(Long id) {
        return userRepository.findById(id); // Используем готовый метод findById
    }
}

Таким образом, CrudRepository — это фундаментальный строительный блок для репозиториев в Spring Data, обеспечивающий базовую функциональность работы с данными.