sql 查询中的这个占位符是什么?



这是我一直在阅读的方法,不是我做的。 我不理解此查询中的 o,也不了解它使用的 sql 语言。谁能向我解释它是如何工作的以及它的选择是什么?

queryMain.append("SELECT o FROM ctrData o "(;

public Specification byCtr(String ctr) {
StringBuilder queryMain = new StringBuilder();
queryMain.append("SELECT o FROM ctrData o ");
StringBuilder clause = new StringBuilder();
clause.append("WHERE o.ctr = :ctr");
Map<String, Object> param = new HashMap<>();
param.put("ctr", ctr);
super.init(queryMain.toString(), clause.toString(), param);
return this;
}

你有这个查询:

SELECT o
FROM ctrData o;

在所有数据库中,这将从表ctrData中选择名为o的列。 这相当于o.o.

在大多数数据库中,如果没有这样的列,您将收到错误。 一些数据库(如 Postgres(支持记录/结构。 在这些中,查询将返回与每一行关联的记录。

如果没有更多信息,很难说这实际上是什么,但它看起来很像JPQL,它是JPA的SQL类查询语言。

在 JPQL 中,SELECT o FROM ctrData o的含义是:

  • ctrData将是实体的名称(即映射的数据类(
  • ctrData o将创建一个别名来引用该实体
  • 因此,SELECT o FROM ctrData o意味着您要选择该实体的所有实例

如何转换为SQL(如果有的话(将取决于您的应用程序和您使用的框架(如果这实际上是JPQL(,但它可能是类似于select o.* from table_ctrData_is_mapped_to o

此外,该WHERE o.ctr = :ctr将意味着以下内容:

  • WHERE与 SQL 中的相同,即它为选择查询定义了一个过滤器/where-子句
  • o.ctr意味着应检查ctrData实体中的属性ctr(由o别名(
  • :ctr是一个命名参数,即一个占位符,以便框架知道将名为ctr的参数的值放在哪里(请参阅param.put("ctr", ctr);(

此条件将映射到的 SQL 可能类似于WHERE o.column_ctr_is_mapped_to = ?(此处使用的是 JDBC 参数(。

最新更新