DEV Community

Cover image for 🐾 Hibernate Zoo: Путеводитель по языкам запросов в мире данных 🐾
Olga Lugacheva
Olga Lugacheva

Posted on

1

🐾 Hibernate Zoo: Путеводитель по языкам запросов в мире данных 🐾

Добро пожаловать в 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);
}

Enter fullscreen mode Exit fullscreen mode

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

List<Animal> mammals = animalRepository.findByTypeNative("mammal");
mammals.forEach(System.out::println);

Enter fullscreen mode Exit fullscreen mode

👉 Слон тут явно говорит: "Дай мне всех млекопитающих!"
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();

Enter fullscreen mode Exit fullscreen mode

👉 Гепард бежит к млекопитающим со скоростью молнии!

💡 Плюсы: Гибкость.
😅 Минусы: Нужно следить за строками, иначе гепард запутается.

🐻 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();

Enter fullscreen mode Exit fullscreen mode

👉 Медведь основательно ищет млекопитающих, не пропуская ни одного.

💡 Плюсы: Гибкость и типобезопасность.
😅 Минусы: Немного громоздко.

🐦 JPQL: Попугай-болтун

Попугай говорит на языке сущностей! Он похож на SQL, но более дружелюбный к объектам.

Пример:

List<Animal> mammals = entityManager.createQuery(
    "SELECT a FROM Animal a WHERE a.type = 'mammal'", Animal.class)
    .getResultList();
Enter fullscreen mode Exit fullscreen mode

👉 Попугай просто болтает с базой: "Привет, дай мне всех млекопитающих!"

💡 Плюсы: Похож на SQL, но для сущностей.
😅 Минусы: Меньше возможностей, чем у медведя .

🐥 Spring Data Query Methods: Цыплёнок-помощник

Цыплёнок любит простоту. Вы пишете метод в репозитории, а он сам знает, как искать данные.

Пример:

List<Animal> findByType(String type);

Enter fullscreen mode Exit fullscreen mode

👉 Цыплёнок тут как бы говорит: "Ты скажи, что нужно искать, а я найду!"

💡 Плюсы: Очень просто!
😅 Минусы: Только для стандартных задач.

🦊 Spring Data Specifications: Лис-стратег

Лис умён и хитёр. Он комбинирует запросы как пазлы.

Пример:

Specification<Animal> isMammal = (root, query, cb) -> cb.equal(root.get("type"), "mammal");
List<Animal> mammals = animalRepository.findAll(isMammal);

Enter fullscreen mode Exit fullscreen mode

👉 Лис создаёт стратегию, чтобы найти млекопитающих.

💡 Плюсы: Комбинация условий.
😅 Минусы: Требует опыта.

🐾

Какого зверя выбрать?

Если нужен доступ на уровне SQL – зови слона.
Если любишь гибкость и типобезопасность – позови медведя.
Если хочешь что-то быстро построить – зови гепарда.
Если хочешь простоты – доверься цыплёнку.
Если хочешь гибкость стратегий – позови лиса.
Каждое животное уникально и подходит для своей задачи. В Hibernate Zoo вы найдете друзей на любой случай! 🐾

sqlel

Полезные ссылочки

Hibernate

Spring Data JPA

Speedy emails, satisfied customers

Postmark Image

Are delayed transactional emails costing you user satisfaction? Postmark delivers your emails almost instantly, keeping your customers happy and connected.

Sign up

Top comments (0)

A Workflow Copilot. Tailored to You.

Pieces.app image

Our desktop app, with its intelligent copilot, streamlines coding by generating snippets, extracting code from screenshots, and accelerating problem-solving.

Read the docs

👋 Kindness is contagious

Please leave a ❤️ or a friendly comment on this post if you found it helpful!

Okay