1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/silentbalanceyh-vertx-zero

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
d10067-jooqcrud-advanced-search-operation.md 6 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
gitlife-traslator Отправлено 30.11.2024 04:28 85b9559

Jooq/CRUD, Paging/Sorting

В этой главе мы рассмотрим расширенные операции поиска Jooq, которые можно использовать в различных таблицах списков с разбиением на страницы. Более подробно о том, как написать расширенную операцию поиска, вы можете узнать из текущего руководства.

Демо-проекты:

  • Standalone - 6093: up-thea:

Вот все API, предоставляемые классом Ux.Jooq для пейджинга и сортировки:

  1. Future<JsonObject> searchAndAsync(Inquiry inquiry);
  2. Future<JsonObject> searchAndAsync(Inquiry inquiry, String pojo);
  3. <T> Future<List<T>> searchAndListAsync(Inquiry inquiry);
  4. Future<JsonObject> searchOrAsync(Inquiry inquiry);
  5. Future<JsonObject> searchOrAsync(Inquiry inquiry, String pojo);
  6. <T> Future<List<T>> searchOrOrListAsync(Inquiry inquiry).

В текущей версии вышеописанные три API не предоставляются системой. Если вы хотите использовать DTO, необходимо предоставить сопоставление up.god.file, которое было представлено в предыдущем руководстве:

src/main/resources/pojo/tabular.yml:

type: "up.god.domain.tables.pojos.SysTabular"
mapping:
  pkId: key
  isActive: active
  zsigma: sigma
  zlanguage: language
  zcreateTime: createTime
  scode: code
  stype: type
  iorder: order
  sname: name
columns:
  name: S_NAME
  code: S_CODE
  type: S_TYPE
  order: I_ORDER
  language: Z_LANGUAGE
  createTime: Z_CREATE_TIME
  updateTime: Z_UPDATE_TIME
  active: IS_ACTIVE
  sigma: Z_SIGMA

1. Исходный код

1.1. API

package up.god.micro.advanced;

import io.vertx.up.annotations.Address;
import io.vertx.up.annotations.EndPoint;

import jakarta.ws.rs.BodyParam;
import javax.ws.rs.POST;
import javax.ws.rs.Path;

@EndPoint
@Path("/api")
public interface SearchApi {
    @Path("tabular/search")
    @POST
    @Address("ZERO://QUEUE/SEARCH")
    String search(@BodyParam String name);
}

Поскольку мы будем сериализовать данные тела в Inquiry напрямую, здесь рекомендуется использовать метод POST, а не GET для поиска.

1.2. Потребитель

package up.god.micro.advanced;

import io.vertx.core.Future;
import io.vertx.core.json.JsonObject;
import io.vertx.up.unity.Ux;
import io.vertx.up.annotations.Address;
import io.vertx.up.annotations.Queue;
import io.vertx.up.commune.Envelop;

import jakarta.inject.Inject;

@Queue
public class SearchWorker {

    @Inject
    private transient SearchStub searchStub;

    @Address("ZERO://QUEUE/SEARCH")
    public Future<JsonObject> search(final Envelop envelop) {
        final JsonObject data = Ux.getJson(envelop);
        // Второй параметр — это имя файла up.god.yml «tabular.yml».
        return this.searchStub.search(Ux.getInquiry(data, "tabular"));
    }
}

1.3. Stub (интерфейс)

package up.god.micro.advanced;

import io.vertx.core.Future;
import io.vertx.core.json.JsonObject;
import io.vertx.up.atom.query.Inquiry;

public interface SearchStub {

    Future<JsonObject> search(final Inquiry inquiry);
}

1.4. Сервис (реализация)

package up.god.micro.advanced;

import io.vertx.core.Future;
import io.vertx.core.json.JsonObject;
import io.vertx.up.unity.Ux;
import io.vertx.up.atom.query.Inquiry;
import up.god.domain.tables.daos.SysTabularDao;

public class SearchService implements SearchStub {
    @Override
    public Future<JsonObject> search(final Inquiry inquiry) {
        return Ux.Jooq.on(SysTabularDao.class)
                .searchAndAsync(inquiry, "tabular");
    }
}

2. Точки для поиска

  • Здесь мы использовали API Ux.getInquiry, чтобы создать действительный объект Inquiry типа io.vertx.up.atom.query.Inquiry.
  • Если вы не предоставите сопоставление pojo up.god.file (второй аргумент), вам следует заменить имена полей в узлах запроса JSON sorter и criteria на имена столбцов SQL.

3. Тестирование

Здесь мы подготовили различные случаи для тестирования этого API поиска.

URL: http://localhost:6093/api/tabular/search.

Метод: POST.

3.1. Пустой запрос

Запрос:

{
}

Ответ:

{
    "data":{
        "list":[
            {
                "key": 1,
``` ## 4. Summary

Из этой главы вы должны знать, как выполнять общий поиск с помощью JOOQ zero.

* `sorter`, `pager`, `projection`, `criteria`  это конкретные параметры, если вы используете тело напрямую;
* `sorter` и `criteria` поддерживают использование столбцов SQL напрямую, если вы не используете аргумент `pojo`;
* `projection` может удалять некоторые возвращаемые поля, если вы используете `pojo`. В файле up.god.file имена полей проекции должны быть настроены в узле `mapping`.
* `criteria` поддерживает синтаксис фильтра нуля, представленный в предыдущем уроке, и все соединители в SQL являются `AND`;
* Формат возвращаемых данных фиксирован, как вы видите в примерах.

Опубликовать ( 0 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/silentbalanceyh-vertx-zero.git
git@api.gitlife.ru:oschina-mirror/silentbalanceyh-vertx-zero.git
oschina-mirror
silentbalanceyh-vertx-zero
silentbalanceyh-vertx-zero
master