В этой главе мы перейдём к операциям выборки списков. В классе 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 можно использовать для выборки списка с различными условиями, и все эти условия часто используются в реальных проектах. В этой главе мы не будем рассматривать объяснение фильтра, сосредоточимся на базовом использовании, а затем продолжим.
Демо-проекты:
up-thea
.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);
}
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);
}
}
Здесь мы добавили два метода в определение интерфейса: 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);
}
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"
}
]
}
В этой главе описано, как получать списки из базы данных при различных условиях. На основе приведённых примеров вы можете узнать, как извлекать данные из базы данных. В следующей главе мы рассмотрим детали фильтров. На самом деле andFilters
и orFilters
являются объектами JsonObject, но есть некоторые специфические синтаксические особенности, которые разработчики должны учитывать при создании сложных фильтров.
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Опубликовать ( 0 )