Ответ
Panache — это модуль фреймворка Quarkus, который значительно упрощает разработку слоя доступа к данным (Data Access Layer) для MongoDB (и других СУБД), предлагая два стиля: Active Record и Repository.
Цель: Уменьшение шаблонного кода (boilerplate) для стандартных CRUD-операций.
1. Стиль Active Record
Сущность наследуется от PanacheMongoEntity и сама содержит методы для работы с данными.
import io.quarkus.mongodb.panache.PanacheMongoEntity;
@Entity
public class Person extends PanacheMongoEntity {
public String name;
public Integer age;
// Статические методы для запросов становятся доступны прямо на классе
public static Person findByName(String name) {
return find("name", name).firstResult();
}
public static List<Person> findAdults() {
return list("age >= ?1", 18); // Поддержка HQL-подобных запросов
}
}
// Использование
Person person = new Person();
person.name = "Alice";
person.age = 30;
person.persist(); // Сохранение
Person found = Person.findByName("Alice");
2. Стиль Repository
Создается отдельный репозиторий, реализующий PanacheMongoRepository<Entity>.
import io.quarkus.mongodb.panache.PanacheMongoRepository;
import jakarta.enterprise.context.ApplicationScoped;
@ApplicationScoped
public class PersonRepository implements PanacheMongoRepository<Person> {
// Базовые методы (findById, listAll, persist, delete и т.д.) предоставляются автоматически
public List<Person> findAdults() {
return list("age >= ?1", 18);
}
}
Ключевые возможности Panache MongoDB:
- Автоматические CRUD-операции:
persist(),findById(),listAll(),delete(),update(). - Удобные запросы: Поддержка Hibernate-подобного HQL (Panache Query) для MongoDB.
- Интеграция с Quarkus: Работа в рамках CDI, автоматическое управление сессиями.
- Генерация
_id: Автоматическая генерацияObjectIdдля сущностей, наследующихPanacheMongoEntity.