Hibernate. Query DSL#

Query DSL

Возможности данной операции аналогичны возможностям операции выбора по id.

QueryDSL. Выбор записи.#

import com.querydsl.core.types.dsl.BooleanExpression;
import org.testng.annotations.Test;
import ru.tinkoff.qa.neptune.hibernate.model.QTestEntity;
import ru.tinkoff.qa.neptune.hibernate.model.TestEntity;

import static java.time.Duration.ofMillis;
import static java.time.Duration.ofSeconds;
import static ru.tinkoff.qa.neptune.hibernate.HibernateContext.hibernate;
import static ru.tinkoff.qa.neptune.hibernate.select.querydsl.QueryDSLSelectStepFactory.byPredicate;

public class MyTest {

    @Test
    public void test() {
        QTestEntity q = QTestEntity.qTestEntity;
        BooleanExpression predicate = q.id.eq(1L) //динамически построенный запрос
                .and(q.name.eq("Test name"))
                .and(q.listData.contains("A"));

        TestEntity entity = hibernate().select(
            //описание того ЧТО выбирается,
            //в свободной форме или бизнес
            //терминологии
            "Test entity",
            byPredicate(TestEntity.class, q, predicate)
            //
            //Необходимые параметры
            //
        );
    }
}

QueryDSL. Выбор записей.#

import com.querydsl.core.types.Order;
import com.querydsl.core.types.OrderSpecifier;
import com.querydsl.core.types.dsl.BooleanExpression;
import org.testng.annotations.Test;
import ru.tinkoff.qa.neptune.hibernate.model.QTestEntity;
import ru.tinkoff.qa.neptune.hibernate.model.TestEntity;

import java.util.List;

import static java.time.Duration.ofMillis;
import static java.time.Duration.ofSeconds;
import static ru.tinkoff.qa.neptune.hibernate.HibernateContext.hibernate;
import static ru.tinkoff.qa.neptune.hibernate.select.querydsl.QueryDSLSelectStepFactory.allByPredicate;
import static ru.tinkoff.qa.neptune.hibernate.select.querydsl.QueryDSLSelectStepFactory.allOrdered;
import static ru.tinkoff.qa.neptune.hibernate.select.querydsl.QueryDSLSelectStepFactory.asAPageByPredicate;

public class MyTest {

  @Test
  public void test() {
    QTestEntity q = QTestEntity.qTestEntity;
    BooleanExpression predicate = q.id.eq(1L)
            .and(q.name.eq("Test name"))
            .and(q.listData.contains("A"));

    List<TestEntity> entities = hibernate().select(
        //описание того ЧТО выбирается,
        //в свободной форме или бизнес
        //терминологии
        "Test entities",
        allByPredicate(TestEntity.class, q, predicate)
        //
        //Необходимые параметры
        //
    );
    
    //с сортировкой
    List<TestEntity> entities2 = hibernate().select(
        "Test entities",
        //есть следующие варианты: 
        // - allOrdered(Class<R> entity, EntityPath<?> entityPath, OrderSpecifier<?> orderSpecifier)
        // - allOrdered(Class<R> entity, EntityPath<?> entityPath, Order order, Expression<C> target, OrderSpecifier.NullHandling handling)
        // - allOrdered(Class<R> entity, EntityPath<?> entityPath, Order order, Expression<C> target)
        allOrdered(TestEntity.class, q, new OrderSpecifier<>(Order.ASC, q.name))
    );

    //с сортировкой по нескольким параметрам
    List<TestEntity> entities3 = hibernate().select(
        "Test entities",
        allOrdered(TestEntity.class, q, new OrderSpecifier<>(Order.ASC, q.name))
            .orderSpecifier(Order.DESC, q.arrayData)
            .predicate(predicate) //также можно указать предикат для более специфического запроса
    );

    //с пагинацией
    List<TestEntity> entities4 = hibernate().select(
        "Test entities",
        asAPageByPredicate(TestEntity.class, q, predicate)
            .limit(10) // по умолчанию 1, значение должно быть >= 1
            .offset(5) // по умолчанию 0, значение должно быть >= 0
            .orderSpecifier(Order.DESC, q.name)
            .orderSpecifier(Order.ASC, q.arrayData)
    );
  }
}