0

截至目前,我们在 Dojo 数据网格上提供客户端排序。现在我们需要增强服务器端排序意味着排序应该适用于网格上的所有页面。截至目前,我们在主表上连接了 4 个表,并且有 2 条 lac 记录,并且可能会增加。执行 SQL 时,需要 5-8 分钟的时间将所有记录提取到我的 java 代码中,并且我需要对它们应用一些计算,并且我使用比较器提供自定义排序。我们有每个比较器来代表每一列。

我担心的是如何在短时间内将整个数据获取到服务层代码?有没有办法通过数据源配置来提高执行速度?

return new Comparator<QueryHS>() {

                public int compare(QueryHS object1, QueryHS object2) {
                    int tatAbs = object1.getTatNb().intValue() - object1.getExternalUnresolvedMins().intValue();
                    String negative = "";
                    if (tatAbs < 0) {
                        negative = "-";
                    }
                    String tatAbsStr = negative + FormatUtil.pad0(String.valueOf(Math.abs(tatAbs / 60)), 2) + ":"
                        + FormatUtil.pad0(String.valueOf(Math.abs(tatAbs % 60)), 2);
         //           object1.setTatNb(tatAbs);
                    object1.setAbsTat(tatAbsStr.trim());

                    int tatAbs2 = object2.getTatNb().intValue() - object2.getExternalUnresolvedMins().intValue();
                    negative = "";
                    if (tatAbs2 < 0) {
                        negative = "-";
                    }
                    String tatAbsStr2 = negative + FormatUtil.pad0(String.valueOf(Math.abs(tatAbs2 / 60)), 2) + ":"
                        + FormatUtil.pad0(String.valueOf(Math.abs(tatAbs2 % 60)), 2);

           //         object2.setTatNb(tatAbs2);
                    object2.setAbsTat(tatAbsStr2.trim());
                    if(tatAbs > tatAbs2)
                        return 1;
                    if(tatAbs < tatAbs2)
                        return -1;
                    return 0;
                }
            };
4

1 回答 1

0

您不应将数据库中的所有 2 lac 记录提取到您的应用程序中。你应该只获取需要的东西。

正如您所说,您在主表上连接了 4 个表,您必须为它们提供 Hibernate 实体类,并在它们之间建立相应的映射。使用分页技术仅获取您向用户显示的行数。Hibernate 知道如何在您的特定数据库上有效地完成这项工作。

您甚至可以使用聚合函数:count(), min(), max(), sum(), and avg()使用 HQL 来获取相关数据。

于 2013-10-30T10:35:36.290 回答