Добро пожаловать в Hibernate Zoo! Сегодня мы прогуляемся по волшебному миру запросов к базе данных. Разные животные-запросы здесь выполняют свои задачи: кто-то собирает информацию, кто-то фильтрует, а кто-то умело жонглирует данными. Давайте познакомимся с ними поближе и разберем, как они работают! 🚀
🐘 Hibernate Native SQL: Слон-гигант
Слон – могучий зверь! Он может поднимать огромные запросы на "родном языке" базы данных — SQL.
@Repository
public interface AnimalRepository extends JpaRepository<Animal, Long> {
@Query(value = "SELECT * FROM animals WHERE type = :type", nativeQuery = true)
List<Animal> findByTypeNative(@Param("type") String type);
}
Пример использования:
List<Animal> mammals = animalRepository.findByTypeNative("mammal");
mammals.forEach(System.out::println);
👉 Слон тут явно говорит: "Дай мне всех млекопитающих!"
nativeQuery = true говорит Hibernate, что это настоящий SQL.
💡 Плюсы: Мощный и прямой доступ к базе. Это удобно, если нужно выполнять запросы, которые сложно выразить через JPQL, Criteria API или другие подходы.
😅 Минусы: Не самый гибкий зверь, может быть тяжеловесным для сложных структур. Синтаксис запроса зависит от конкретной базы данных (например, PostgreSQL или MySQL).
🐆 EntityManager Dynamic Queries: Гепард-исследователь
Гепард любит скорость и динамику. Он строит запросы прямо "на ходу".
Пример:
String query = "SELECT a FROM Animal a WHERE a.type = :type";
List<Animal> mammals = entityManager.createQuery(query)
.setParameter("type", "mammal")
.getResultList();
👉 Гепард бежит к млекопитающим со скоростью молнии!
💡 Плюсы: Гибкость.
😅 Минусы: Нужно следить за строками, иначе гепард запутается.
🐻 Criteria API: Медведь-строитель
Медведь основателен и любит все делать по порядку. Он строит запросы как дом: кирпичик за кирпичиком.
Пример:
CriteriaBuilder cb = entityManager.getCriteriaBuilder();
CriteriaQuery<Animal> query = cb.createQuery(Animal.class);
Root<Animal> animal = query.from(Animal.class);
query.select(animal).where(cb.equal(animal.get("type"), "mammal"));
List<Animal> mammals = entityManager.createQuery(query).getResultList();
👉 Медведь основательно ищет млекопитающих, не пропуская ни одного.
💡 Плюсы: Гибкость и типобезопасность.
😅 Минусы: Немного громоздко.
🐦 JPQL: Попугай-болтун
Попугай говорит на языке сущностей! Он похож на SQL, но более дружелюбный к объектам.
Пример:
List<Animal> mammals = entityManager.createQuery(
"SELECT a FROM Animal a WHERE a.type = 'mammal'", Animal.class)
.getResultList();
👉 Попугай просто болтает с базой: "Привет, дай мне всех млекопитающих!"
💡 Плюсы: Похож на SQL, но для сущностей.
😅 Минусы: Меньше возможностей, чем у медведя .
🐥 Spring Data Query Methods: Цыплёнок-помощник
Цыплёнок любит простоту. Вы пишете метод в репозитории, а он сам знает, как искать данные.
Пример:
List<Animal> findByType(String type);
👉 Цыплёнок тут как бы говорит: "Ты скажи, что нужно искать, а я найду!"
💡 Плюсы: Очень просто!
😅 Минусы: Только для стандартных задач.
🦊 Spring Data Specifications: Лис-стратег
Лис умён и хитёр. Он комбинирует запросы как пазлы.
Пример:
Specification<Animal> isMammal = (root, query, cb) -> cb.equal(root.get("type"), "mammal");
List<Animal> mammals = animalRepository.findAll(isMammal);
👉 Лис создаёт стратегию, чтобы найти млекопитающих.
💡 Плюсы: Комбинация условий.
😅 Минусы: Требует опыта.
🐾
Какого зверя выбрать?
Если нужен доступ на уровне SQL – зови слона.
Если любишь гибкость и типобезопасность – позови медведя.
Если хочешь что-то быстро построить – зови гепарда.
Если хочешь простоты – доверься цыплёнку.
Если хочешь гибкость стратегий – позови лиса.
Каждое животное уникально и подходит для своей задачи. В Hibernate Zoo вы найдете друзей на любой случай! 🐾
Top comments (0)