【问题标题】:ORDER BY for different columns by passing in the column header通过传入列标题对不同的列进行 ORDER BY
【发布时间】:2020-09-29 20:36:59
【问题描述】:

我不确定这是否可能实现,但希望找到有关我在 java 中的存储库的 JQPL 查询的信息。我有一个这样的示例表:

 Name | Address | City |
--------------------------
   A  |    A    |   C  | 
   C  |    B    |   B  |
   B  |    C    |   A  |

我希望这样当我传入列名时,我将能够按列对所有行的结果进行排序。例如,如果我按名称订购,那么它应该返回 A B C 而不是 A C B。我知道这可以使用基本查询来实现,例如:

SELECT * FROM Customers
ORDER BY Name;

但是我不确定我是否可以将该选项应用于所有列。因此,如果用户决定将 order 选项传递给 address 他们可以这样做,但如果他们决定将其设置为 city 也是如此。因此,为了清楚起见,我正在尝试为我的查询应用按所有列排序的选项,但不确定这是否可能。如果不是,是否有替代方案?谢谢。

【问题讨论】:

  • 您可以调整查询字符串以包含您想要排序的列。
  • 你好@GordonLinoff,很抱歉问,你能举个例子来说明你的意思吗?
  • 你的问题对我来说有点不清楚。但就排序而言,您可以按单列或多列排序。
  • 你好@RajenRaiyarela 我的意思是我的表有三列,它是一个连接到控制器访问的存储库方法的查询。我现在有了它,用户可以传入控制器的列名。我想知道的是,是否可以按用户传入的名称进行排序,我该怎么做?
  • 您可以将作为输入参数接收到的列名附加在SQL语句中order by子句之后作为变量。

标签: java sql jpql


【解决方案1】:

如果您使用JpaRepository,您可以使用Sort 参数提供自定义排序:

@Repository
public interface CustomerRepository extends JpaRepository<Customers, Long> {

    List<Customer> findAll(Sort by);
}

您的自定义排序服务:

@Autowired
private CustomerRepository customerRepository;

public List<Customer> getCustomers(String ... columnNames) {
    return customerRepository.findAll(Sort.by(columnNames));
}

public List<Customer> getCustomersOrderedByNameDescAndAddress() {
    return customerRepository.findAll(Sort.by("name").descending().and(Sort.by("address")));
}

【讨论】:

    猜你喜欢
    • 2019-07-06
    • 1970-01-01
    • 2021-10-07
    • 1970-01-01
    • 1970-01-01
    • 2016-10-26
    • 2023-03-15
    • 1970-01-01
    相关资源
    最近更新 更多