【问题标题】:Where is more efficient or convenient to sort data?在哪里对数据进行排序更有效或更方便?
【发布时间】:2013-10-17 15:07:03
【问题描述】:

我有一个 Java Web 应用程序,使用 JPA 进行存储,并遵循 MVC 模式。在许多方法中,我必须返回一个List<Product>,我应该按其名称订购。 排序逻辑在哪里更好?

在像这样的控制器方法中,在 Query 本身中:

   public List<Product> obtainProductList()
   {
      Query query = em.createQuery("SELECT g FROM Product g ORDER BY g.name");
      List<Product> ret = query.getResultList();

      if (ret == null)
      {
         return new ArrayList<>();
      }
      else
      {
         return ret;
      }
   }

或者在将数据检索到页面本身时可能在 Manager 类中?:

   public List<Product> getProducts()
   {
      products = controller.obtainProductList();
      //Sort the list by comparators, for example;
      return this.products;
   }

目前我正在使用第一种方法,但我对新方法持开放态度。

【问题讨论】:

  • 在查询中使用它。数据库针对此类操作进行了优化
  • 在服务器端排序不是一个选项,尤其是当您需要根据来自巨大连接的标准进行排序时。让数据库做这个工作,JPA 就是为了让你做这个。
  • 除非您知道数据库不会像@verbose-mode 所说的那样将数据留给数据库的特殊信息。
  • 查看objectdb.com/java/jpa/query/jpql/order的最后一个例子。 IMO,这是最好的方法,因为它提供了类型检查。

标签: java jpa


【解决方案1】:

排序当然大部分是由数据库服务器完成的,但是你的逻辑放在哪里呢? 我的回答是不要把它放到你的控制器中。您的前端需要此排序数据,但也许您必须(将不得不)在许多其他地方使用它,因此控制器操作职责只是提供它,但与应该是的服务/提供者/存储库协作负责提供排序的数据和控制器动作应该只是通过它。这样控制器更容易测试,并且您的数据更可重用。遵循 Slim Controllers - Slim Views 方法和 SRP。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-30
    • 2021-11-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-20
    相关资源
    最近更新 更多