给定一个具有多个(例如 5 个)不同搜索屏幕的 Web 应用程序(Java、Spring、Hibernate 和 Sybase 作为 DB),我想首先计算基于用户条件的搜索结果是否会超过限制,例如 1000 行。即使用户提供了合理的过滤器和标准,也可能会出现超过 1000 个的巨大结果。
这样做是推荐的:
- select count(*) from table --clauses, etc here
- 然后如果 > 1000,不进行实际搜索,返回并显示限制错误(告诉用户细化搜索)
- 否则如果 < 1000,进行实际搜索并将结果集返回给用户
还是有更好的解决方案来处理这个问题?
如果这是要走的路,我的后续问题是,我们如何避免重复 sql 查询?因为我理解这样做,所以需要我声明相同的搜索 sql,除了 select 子句将只包含 count(*)。
更新
此外,我想避免两件事: 1. 执行实际 sql 的处理 2. ORM 加载/映射域对象(在这种情况下为休眠) *当我检测到计数时避免 1 和 2 > 1000。