这是我一直在阅读的方法,不是我做的。 我不理解此查询中的 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 参数(。