Найти тему
16 подписчиков

​​Если и предыдущая тема показалась вам простой, то вот настоящий хардкор - Spring Data JPA предоставляет несколько способов для выполнения более сложных запросов к базе данных, таких как QueryDSL, Criteria API и JPQL.

QueryDSL — это библиотека, которая позволяет создавать типобезопасные SQL-запросы на Java. Она предоставляет DSL (Domain Specific Language) для создания запросов, которые могут быть скомпилированы и проверены на этапе компиляции. Например, мы можем создать запрос для выборки всех пользователей, у которых возраст больше 18 лет, используя QueryDSL:
public interface UserRepository extends JpaRepository<User, Long>, QuerydslPredicateExecutor<User> {
default List<User> findUsersByAgeGreaterThan(int age) {
QUser user = QUser.user;
return new JPAQuery<>(entityManager)
.from(user)
.where(user.age.gt(age))
.fetch();
}
}

Здесь мы используем QuerydslPredicateExecutor для выполнения запроса. Мы создаем объект QUser, который представляет таблицу пользователей в базе данных, и затем создаем запрос, который выбирает всех пользователей, у которых возраст больше заданного.

Criteria API — это другой способ создания типобезопасных запросов на Java. Он предоставляет API для создания запросов, которые могут быть проверены на этапе компиляции. Например, аналогичный запрос для выборки всех пользователей, у которых возраст больше 18 лет, используя Criteria API:
public interface UserRepository extends JpaRepository<User, Long> {
default List<User> findUsersByAgeGreaterThan(int age) {
CriteriaBuilder cb = entityManager.getCriteriaBuilder();
CriteriaQuery<User> query = cb.createQuery(User.class);
Root<User> root = query.from(User.class);
query.select(root).where(cb.gt(root.get("age"), age));
return entityManager.createQuery(query).getResultList();
}
}

Здесь мы используем CriteriaBuilder для создания запроса, который выбирает всех пользователей, у которых возраст больше заданного.

JPQL - это язык запросов JPA, который позволяет создавать запросы на основе объектов сущностей. Он предоставляет возможность создания запросов, которые могут быть проверены на этапе компиляции. Сделаем аналогичную выборку (выбор по возрасту более 18) используя JPQL:
public interface UserRepository extends JpaRepository<User, Long> {
@Query("SELECT u FROM User u WHERE u.age > :age")
List<User> findUsersByAgeGreaterThan(@Param("age") int age);
}

Здесь мы используем аннотацию @Query для создания запроса на основе JPQL. Мы выбираем всех пользователей, у которых возраст больше заданного.
В заключение, Spring Data JPA предоставляет несколько способов для выполнения более сложных запросов к базе данных, таких как QueryDSL, Criteria API и JPQL. Каждый из этих способов имеет свои преимущества и недостатки, и выбор зависит от конкретных требований вашего приложения.
​​Если и предыдущая тема показалась вам простой, то вот настоящий хардкор - Spring Data JPA предоставляет несколько способов для выполнения более сложных запросов к базе данных, таких как QueryDSL,...
2 минуты