我有一个包含1000条记录的列表,我使用display tag在页面加载中显示了1000条记录。
我在某些列上启用了排序,当我点击表标题进行排序时,显示标记正在进行数据库调用并再次加载所有1000条记录。
我们如何限制在显示标记的排序上进行数据库调用? 因为,我们已经加载了所有1000条记录,所以我们是否可以在不加载记录的情况下使用这些列表?
答案 0 :(得分:0)
您缺少一个基础:Pagination。
您不应该一次加载1000条记录;一次加载10条记录(假设您在页面中显示10条记录),并在更改页面/排序时加载其他10条记录。
直接在查询中过滤它们(如果您正在使用查询),例如,在查询中选择第3页(结果从21到30)到按名称排序的最小“人员表”将导致以下结果SQL:
的Oracle
SELECT id, name, age
FROM ( SELECT id, name, age
FROM table_person
ORDER BY name )
WHERE ROWNUM BETWEEN 21 and 30
的PostgreSQL
SELECT id, name, age
FROM table_person
ORDER BY name
LIMIT 10
OFFSET 20
等等。
请务必阅读与您的数据库相关的文档,并使用查询参数指定order by
,starting row
和ending row
值。
答案 1 :(得分:0)
你可以使用setFirstResults(),setMaxResults(),而不必加载所有1000条记录。 divde per page max results仅显示10条记录,setFirstResult是记录列表中前5条的限制记录。
Criteria cr= database_session.createCriteria(Records.class);
cr.addOrder(Order.desc("Recordsdate"));
cr.setFirstResult(5);
cr.setMaxResults(10);
all_records_list = (List<Records>) cr.list();