如何限制displaytag在排序时调用数据库?

时间:2014-05-27 11:38:58

标签: sql struts2 pagination displaytag

我有一个包含1000条记录的列表,我使用display tag在页面加载中显示了1000条记录。

我在某些列上启用了排序,当我点击表标题进行排序时,显示标记正在进行数据库调用并再次加载所有1000条记录。

我们如何限制在显示标记的排序上进行数据库调用? 因为,我们已经加载了所有1000条记录,所以我们是否可以在不加载记录的情况下使用这些列表?

2 个答案:

答案 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 bystarting rowending 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();