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

This site is built on Heroku

Join the ranks of developers at Salesforce, Airbase, DEV, and more who deploy their mission critical applications on Heroku. Sign up today and launch your first app!

Get Started

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

Explore a sea of insights with this enlightening post, highly esteemed within the nurturing DEV Community. Coders of all stripes are invited to participate and contribute to our shared knowledge.

Expressing gratitude with a simple "thank you" can make a big impact. Leave your thanks in the comments!

On DEV, exchanging ideas smooths our way and strengthens our community bonds. Found this useful? A quick note of thanks to the author can mean a lot.

Okay