【问题标题】:How to restrict displaytag to make database call on sorting?如何限制显示标签以在排序时调用数据库?
【发布时间】:2014-07-16 07:25:18
【问题描述】:

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

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

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

【问题讨论】:

    标签: sql struts2 pagination displaytag


    【解决方案1】:

    您缺少基本知识:Pagination

    您不应一次加载 1000 条记录;而是一次加载 10 条记录(假设 10 条记录是您在页面中显示的内容),并在更改页面/排序时加载其他 10 条。

    直接在查询中过滤它们(如果您正在使用查询),例如,在查询中选择第 3 页(结果从 21 到 30)到按名称排序的最小“人员表”,结果如下SQL:

    甲骨文

    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 值。

    【讨论】:

      【解决方案2】:

      您可以使用 setFirstResults()、setMaxResults(),而不是不必要地加载所有 1000 条记录。 divde per page max result 仅显示 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();
      

      【讨论】:

        猜你喜欢
        • 2014-07-09
        • 1970-01-01
        • 1970-01-01
        • 2021-08-19
        • 1970-01-01
        • 1970-01-01
        • 2020-01-17
        • 1970-01-01
        • 2018-05-02
        相关资源
        最近更新 更多