findSingleAttribute

执行查询以检索单个列的值。

要检索特定模型的单个属性的值,我们使用 findSingleAttribute。我们需要使用 select() 方法来选择要检索值的列。

示例:单个属性

var cust = QCustomer.alias();

String name = new QCustomer()
    .select(cust.name)
    .id.equalTo(42)
    .findSingleAttribute();

这会转换为仅在选择子句中具有单个属性的 SQL 查询,如下所示

select t0.name from customers t0 where t0.id = 42

示例:sql 函数

List<String> names =
  new QContact()
    .select("concat(lastName,', ',firstName)")
    .lastName.startsWith("A")
    .findSingleAttributeList();

转换结果类型

在使用 sql 函数时,有时我们需要使用 ::type 来表示我们准备通过 JDBC 获取的逻辑类型。在下面的示例中,我们通过 ::BigDecimal 转换 sql 函数结果,以便 Ebean 通过 JDBC 将函数结果作为 BigDecimal 读取。

type 是 Ebean 支持的任何标量类型的简称。最常见的是 BigDecimal、Long、String,但可以使用 Ebean 支持的任何标量类型。

示例:sql 函数

// given route is a Postgis geometry(linestring,4326)
// return the distance between the start and end points

BigDecimal routeDistance =
  new QTrip()
    .select("ST_Distance(ST_StartPoint(route), ST_EndPoint(route))::BigDecimal")
    .id.eq(tripId)
    .findSingleAttribute();

上述使用 ::BigDecimal,以便将 sql 函数的结果作为 BigDecimal 读取。

findSingleAttributeList

与 findSingleAttribute 相同,但返回结果列表。

示例

var cust = QCustomer.alias();

List<String> names
  = new QCustomer()
    .setDistinct(true)
    .select(cust.name)
    .order()
      .name.asc()
    .findSingleAttributeList();