Ответ
В проекте использовал SQL через Spring Data JPA и Hibernate. Применял несколько подходов:
- JPQL (Java Persistence Query Language) для объектно-ориентированных запросов.
- Нативные SQL-запросы для сложных операций или специфичного синтаксиса СУБД.
- Criteria API для динамического построения запросов.
Примеры из репозитория:
@Repository
public interface UserRepository extends JpaRepository<User, Long> {
// JPQL-запрос
@Query("SELECT u FROM User u WHERE u.active = true")
List<User> findActiveUsers();
// Нативный SQL-запрос
@Query(value = "SELECT * FROM users WHERE registration_date > :date", nativeQuery = true)
List<User> findUsersRegisteredAfter(@Param("date") LocalDate date);
}
Почему так? JPQL переносим между СУБД, а нативный SQL дает полный контроль. Для оптимизации использовал индексы и анализировал планы запросов через EXPLAIN.