В этой главе мы рассмотрим расширенные операции поиска Jooq, которые можно использовать в различных таблицах списков с разбиением на страницы. Более подробно о том, как написать расширенную операцию поиска, вы можете узнать из текущего руководства.
up-thea
:Вот все API, предоставляемые классом Ux.Jooq
для пейджинга и сортировки:
Future<JsonObject> searchAndAsync(Inquiry inquiry)
;Future<JsonObject> searchAndAsync(Inquiry inquiry, String pojo)
;<T> Future<List<T>> searchAndListAsync(Inquiry inquiry)
;Future<JsonObject> searchOrAsync(Inquiry inquiry)
;Future<JsonObject> searchOrAsync(Inquiry inquiry, String pojo)
;<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
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 для поиска.
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"));
}
}
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);
}
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");
}
}
Ux.getInquiry
, чтобы создать действительный объект Inquiry типа io.vertx.up.atom.query.Inquiry
.sorter
и criteria
на имена столбцов SQL.Здесь мы подготовили различные случаи для тестирования этого API поиска.
URL: http://localhost:6093/api/tabular/search.
Метод: POST.
Запрос:
{
}
Ответ:
{
"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 )