Вопрос оценивает понимание подходов к работе с базой данных — ручного SQL и ORM, а также ситуации, когда стоит применять каждый из них.
Ручной SQL даёт полный контроль над запросами, может быть быстрее и понятнее для сложной логики, но требует больше кода и повышает риск ошибок. ORM (например, Hibernate) автоматизирует работу с БД, ускоряет разработку и повышает читаемость, но может быть менее гибким и производительным в сложных случаях.
1. Ручной SQL: преимущества и недостатки
Плюсы:
Полный контроль над запросами и производительностью.
Удобно для сложных JOIN, агрегаций, подзапросов.
Легко оптимизировать под конкретную СУБД.
Минусы:
Много шаблонного кода (mapping, соединения и т. д.).
Требуется писать больше SQL вручную.
Выше риск ошибок при изменении структуры таблиц.
Пример:
String sql = "SELECT * FROM users WHERE status = ?";
PreparedStatement stmt = connection.prepareStatement(sql);
stmt.setString(1, "ACTIVE");
ResultSet rs = stmt.executeQuery();
// Далее ручная обработка результатов2. ORM (Object-Relational Mapping): преимущества и недостатки
Плюсы:
Меньше кода — работа с объектами как с обычными Java-классами.
Упрощает транзакции и кэширование.
Поддержка миграций, валидации, lifecycle событий.
Минусы:
Абстракция может скрывать неэффективные SQL-запросы.
Трудно реализовать сложные схемы, кастомную логику.
Повышенный overhead при изучении и настройке.
Пример с Hibernate:
User user = session.get(User.class, 1);
user.setStatus("INACTIVE");
session.update(user);3. Когда использовать:
ORM — если структура БД стабильна, задачи стандартные, важна скорость разработки.
SQL — если требуется высокая производительность, сложные выборки или нестандартная логика.