我正在使用java实现Web服务。在此实现中,有以下步骤
1) 使用休眠在数据库中获取值。
2) 获取值存储到类 Bean 列表类型
List<IdentityDocArchive> resultList = q.getResultList();
3)然后我做排序上次更新日期
Collections.sort(identityDocList, new Comparator<IdentityDocArchive>() {
DateFormat f = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.S");
@Override
public int compare(IdentityDocArchive o1, IdentityDocArchive o2) {
try {
return f.parse(o2.getLastUpdtDt().toString()).compareTo(f.parse(o1.getLastUpdtDt().toString()));
} catch (ParseException e) {
LOGGER.warning("Failed To Parsing string to date ".concat(e.getMessage()));
throw new IllegalArgumentException(e);
}
}
});
4)现在此列表值存储到另一个列表中
我的问题是,如果不是更好的方法,这是正确的实施方式。
您使用 Hibernate,因此您还应该使用 hibernate/JPA 对数据进行排序。通过命名查询order by ...
或通过CriteriaQuery.orderBy(...)
.您可能还想查看 Java EE 持久性教程。
您也可以使用 Collections.sort
手动对其进行排序,但随后您正在执行数据库的预期工作。(免责声明:您当然应该相应地设置数据库:索引等)
如果您不想对数据库中的数据进行排序,并且列表中没有任何对象和"上次更新日期"属性可以null
,则可以像这样按降序实现Comparator
:
Collections.sort(identityDocList, new Comparator<IdentityDocArchive>() {
@Override
public int compare(IdentityDocArchive o1,
IdentityDocArchive o2) {
return o2.getLastUpdtDt().compareTo(o1.getLastUpdtDt());
}
});
此解决方案应该比原始解决方案更快,因为它避免了冗余的日期解析。
关于在数据库中排序还是在内存中排序更好,这取决于。在某些情况下,Hibernate可能会在查询中生成ORDER BY
子句,这会损害整体性能,从而使内存中排序更快。可能在大多数情况下,两种选择的性能非常相似。但是您需要自己尝试一下。