如何有效地处理资源类中查询参数的多个组合?

发布于 2025-01-20 08:14:12 字数 389 浏览 1 评论 0原文

我的情况是,我需要为我们的 API 编写资源类,该类需要四个以上的查询参数,并且我需要编写的 if else 语句的数量相当于所有这些查询参数,因此如果有 4 个查询参数,我需要编写 16 个 if else 语句,其中 5 个 -> 36 等等,

有更好的方法来做我想做的事吗? Stream API 不是一个好的选择,因为这是一个企业应用程序,实体数量为 30000 个甚至更多,并且有很多用户使用该 API,并且我们遇到了 OutOfMemoryError在过去。

我正在使用 Querydsl,并且无法将 null 值传递给 eq() 方法。

I have the case where i need to write resource classes for our API that take more than four query parameters, and the number of if else statements i need to write is equivalent to the cardinality of the power set of all those query parameters, so in case of 4 query parameters, i need to write 16 if else statements, 5 -> 36 etc.

Is there a better was to do what i am trying to do?
Stream API is not a good option since this is an enterprise application and the number of entities is 30000 and more and there are a lot of users using the API and we had OutOfMemoryError in the past.

I am using Querydsl, and i can't pass null values to the eq() method.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

时间海 2025-01-27 08:14:12

我将参数从控制器传递到立面,然后使用以下内容使用 querydsl

public List<Entity> findAll(Optional<Integer> opId, Optional<String> opName) {
    final QEntity q = QEntity.entity;

    final BooleanBuilder where = new BooleanBuilder();

    opId.ifPresent(id -> where.and(q.id.eq(id)));
    opName.ifPresent(name -> where.and(q.name.eq(name)));
        
    return new JPAQuery.where(where).list(q);
}

I passed the parameters from the controller to the facade and did the following using Querydsl

public List<Entity> findAll(Optional<Integer> opId, Optional<String> opName) {
    final QEntity q = QEntity.entity;

    final BooleanBuilder where = new BooleanBuilder();

    opId.ifPresent(id -> where.and(q.id.eq(id)));
    opName.ifPresent(name -> where.and(q.name.eq(name)));
        
    return new JPAQuery.where(where).list(q);
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文