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

Heroku

Build apps, not infrastructure.

Dealing with servers, hardware, and infrastructure can take up your valuable time. Discover the benefits of Heroku, the PaaS of choice for developers since 2007.

Visit Site

Top comments (0)

Billboard image

The Next Generation Developer Platform

Coherence is the first Platform-as-a-Service you can control. Unlike "black-box" platforms that are opinionated about the infra you can deploy, Coherence is powered by CNC, the open-source IaC framework, which offers limitless customization.

Learn more

👋 Kindness is contagious

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

Okay