我正在使用java实现Web服务。 在此实现中,有以下步骤
1)在数据库中使用hibernate fetch值。
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)现在这个列表值存储在另一个列表中
我的问题是,如果不是更好的方法,这是正确的实施方式。
答案 0 :(得分:1)
您使用Hibernate,因此您还应该使用hibernate / JPA对数据进行排序。通过named query order by ...
或CriteriaQuery.orderBy(...)
。
您可能还想查看Java EE persistence tutorial。
你也可以使用Collections.sort
通过 hand 对其进行排序,但是你正在做数据库的预期工作。 (免责声明:您当然应该相应地设置数据库:索引等)
答案 1 :(得分:0)
如果您不想对数据库中的数据进行排序,并且列表中没有任何对象且“上次更新日期”属性都不是null
,那么您可以实现{ {1}}这样下降顺序:
Comparator
此解决方案应该比原始解决方案更快,因为它避免了冗余的日期解析。
关于在DB中排序还是在内存中排序更好,取决于。在某些情况下,Hibernate可能会在查询中生成一个Collections.sort(identityDocList, new Comparator<IdentityDocArchive>() {
@Override
public int compare(IdentityDocArchive o1,
IdentityDocArchive o2) {
return o2.getLastUpdtDt().compareTo(o1.getLastUpdtDt());
}
});
子句,这会损害整体性能,从而使内存中的排序更快。可能在大多数情况下,两种替代方案的性能非常相似。但你需要亲自尝试一下。