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

OSCHINA-MIRROR/silentbalanceyh-vertx-zero

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

Запрос уникальных данных по одному полю

В этой главе мы рассмотрим некоторые распространённые ситуации: запрос уникальной записи данных по одному полю.

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

  • Standalone — 6093: up-thea

Например, иногда вам может потребоваться запросить запись пользователя по имени вместо первичного ключа. В такой ситуации операции чтения, которые мы представили, могут быть бесполезны.

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

1.1. Api

package up.god.micro.fetch;

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

import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;

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

    @Path("tabular/by/{name}")
    @GET
    @Address("ZERO://QUEUE/BY/NAME")
    String fetchByName(@PathParam("name") String name);
}

1.2. Consumer

package up.god.micro.fetch;

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 FetchWorker {

    @Inject
    private transient FetchStub stub;

    @Address("ZERO://QUEUE/BY/NAME")
    public Future<JsonObject> byName(final Envelop envelop) {
        final String name = Ux.getString(envelop);
        return this.stub.fetchByName(name);
    }
}

1.3. Stub (Interface)

package up.god.micro.fetch;

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

public interface FetchStub {

    Future<JsonObject> fetchByName(String name);
}

1.4. Service (Implementation)

package up.god.micro.fetch;

import io.vertx.core.Future;
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"));
    }
}

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

Здесь мы использовали метод fetchOneAsync для запроса данных по столбцу S_NAME, и вы можете протестировать его следующим образом:

URL: http://localhost:6093/api/tabular/by/%e6%8c%82%e7%89%8c%e4%bb%b7

Метод: GET

Ответ:

{
    "data": {
        "key": 1,
        "active": true,
        "createTime": "2018-02-07T12:09:32",
        "name": "挂牌价",
        "code": "Standard",
        "type": "code.pricecat",
        "order": 1,
        "sigma": "ENhwBAJPZuSgIAE5EDakR6yrIQbOoOPq",
        "language": "cn"
    }
}

Помимо API fetchOneAsync, класс Ux.Jooq предоставляет все API fetchOne, такие как:

  • <T> Future<T> fetchOneAsync(String column, Object value)
  • <T> Future<T> fetchOneAndAsync(JsonObject andFilters)

3. Резюме

Эта глава описывает, как использовать метод fetchOne. Мы продолжим знакомить вас с операциями выборки и расскажем разработчикам, как использовать andFilters в следующих руководствах.

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