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

OSCHINA-MIRROR/silentbalanceyh-vertx-zero

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

Jooq/CRUD, Fetch List Operation

В этой главе мы перейдём к операциям выборки списков. В классе Ux.Jooq есть четыре API, которые можно использовать для выборки списка:

  • <T> Future<List<T>> fetchAsync(String column, Object value);
  • <T> Future<List<T>> fetchInAsync(String column, Object... values);
  • <T> Future<List<T>> fetchAndAsync(JsonObject andFilters);
  • <T> Future<List<T>> fetchOrAsync(JsonObject orFilters).

Эти четыре API можно использовать для выборки списка с различными условиями, и все эти условия часто используются в реальных проектах. В этой главе мы не будем рассматривать объяснение фильтра, сосредоточимся на базовом использовании, а затем продолжим.

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

  • Standalone — 6093: up-thea.

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

1.1. API

package up.god.micro.fetch;

import io.vertx.core.json.JsonArray;
import io.vertx.up.annotations.Address;
import io.vertx.up.annotations.EndPoint;

import javax.ws.rs.*;

@EndPoint
@Path("/api")
public interface FetchListApi {

    @Path("tabular/list/by/{type}")
    @GET
    @Address("ZERO://QUEUE/LIST/BY")
    String fetchByType(@PathParam("type") String type);

    @Path("tabular/list/by")
    @POST
    @Address("ZERO://QUEUE/LIST/BY/TYPES")
    JsonArray fetchByTypes(@BodyParam JsonArray types);

    @Path("tabular/list/multi")
    @GET
    @Address("ZERO://QUEUE/LIST/BY/MULTI")
    String fetchByMulti(@QueryParam("type") String type,
                        @QueryParam("code") String code);
}

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

package up.god.micro.fetch;

import io.vertx.core.Future;
import io.vertx.core.json.JsonArray;
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 FetchListWorker {

    @Inject
    private transient FetchStub stub;

    @Address("ZERO://QUEUE/LIST/BY")
    public Future<JsonArray> fetchByType(final Envelop envelop) {
        final String type = Ux.getString(envelop);
        return this.stub.fetchByTypes(type);
    }

    @Address("ZERO://QUEUE/LIST/BY/TYPES")
    public Future<JsonArray> fetchByTypes(final Envelop envelop) {
        final JsonArray types = Ux.getArray(envelop);
        return this.stub.fetchByTypes(types.getList().toArray());
    }

    @Address("ZERO://QUEUE/LIST/BY/MULTI")
    public Future<JsonArray> fetchByMulti(final Envelop envelop) {
        final String type = Ux.getString(envelop);
        final String code = Ux.getString1(envelop);
        final JsonObject filters = new JsonObject();
        filters.put("S_TYPE", type).put("S_CODE", code);
        return this.stub.fetchByFilters(filters);
    }
}

1.3. Stub

Здесь мы добавили два метода в определение интерфейса: fetchByTypes и fetchByFilters.

package up.god.micro.fetch;

import io.vertx.core.Future;
import io.vertx.core.json.JsonArray;
import io.vertx.core.json.JsonObject;

public interface FetchStub {

    Future<JsonObject> fetchByName(String name);

    Future<JsonArray> fetchByTypes(Object... types);

    Future<JsonArray> fetchByFilters(JsonObject filters);
}

1.4. Service

package up.god.micro.fetch;

import io.vertx.core.Future;
import io.vertx.core.json.JsonArray;
import io.vertx.core.json.JsonObject;
import io.vertx.up.unity.Ux;
import up.god.domain.tables.daos.SysTabularDao;
import up.god.domain.tables.pojos.SysTabular;

public class FetchService implements FetchStub {
    @Override
    public Future<JsonObject> fetchByName(final String name) {
        return Ux.Jooq.on(SysTabularDao.class)
                .<SysTabular>fetchOneAsync("S_NAME", name)
                .compose(item -> Ux.thenJsonOne(item, "tabular"));
    }

    @Override
    public Future<JsonArray> fetchByTypes(final Object... types) {
        return Ux.Jooq.on(SysTabularDao.class)
                .<SysTabular>fetchInAsync("S_TYPE", types)
                .compose(item -> Ux.thenJsonMore(item, "tabular"));
    }

    @Override
    public Future<JsonArray> fetchByFilters(final
``` ## 2. Тестирование

Приведённый выше пример показал, как получить список с различными фильтрами с условием. Вы можете протестировать его следующим образом:

**URL**: [http://localhost:6093/api/tabular/list/by/preorder.category](http://localhost:6093/api/tabular/list/by/preorder.category)

**Метод**: GET

**Ответ**:

```json
{
    "data": [
        {
            "key": 44,
            "active": true,
            "createTime": "2018-02-07T12:09:32",
            "type": "preorder.category",
            "code": "Personal",
            "name": "散客预定",
            "order": 1,
            "sigma": "ENhwBAJPZuSgIAE5EDakR6yrIQbOoOPq",
            "language": "cn"
        },
        {
            "key": 45,
            "active": true,
            "createTime": "2018-02-07T12:09:32",
            "type": "preorder.category",
            "code": "Company",
            "name": "团队预定",
            "order": 2,
            "sigma": "ENhwBAJPZuSgIAE5EDakR6yrIQbOoOPq",
            "language": "cn"
        }
    ]
}

URL: http://localhost:6093/api/tabular/list/by

Метод: POST

Запрос:

[
    "room.status",
    "room.op.status"
]

Ответ:

{
    "data": [
        {
            "key": 8,
            "active": true,
            "createTime": "2018-02-07T12:09:32",
            "type": "room.status",
            "code": "Operation",
            "name": "可操作",
            "jconfig": "{\"visible\":false}",
            "order": 1,
            "sigma": "ENhwBAJPZuSgIAE5EDakR6yrIQbOoOPq",
            "language": "cn"
        },
        ......
    ]
}

URL: http://localhost:6093/api/tabular/list/multi?code=Single&type=code.pricecat

Метод: GET

Ответ:

{
    "data": [
        {
            "key": 2,
            "active": true,
            "createTime": "2018-02-07T12:09:32",
            "type": "code.pricecat",
            "code": "Single",
            "name": "散客执行价",
            "order": 2,
            "sigma": "ENhwBAJPZuSgIAE5EDakR6yrIQbOoOPq",
            "language": "cn"
        }
    ]
}

3. Резюме

В этой главе описано, как получать списки из базы данных при различных условиях. На основе приведённых примеров вы можете узнать, как извлекать данные из базы данных. В следующей главе мы рассмотрим детали фильтров. На самом деле andFilters и orFilters являются объектами JsonObject, но есть некоторые специфические синтаксические особенности, которые разработчики должны учитывать при создании сложных фильтров.

Опубликовать ( 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