SQL 查询

有时,不使用实体 Bean 或 dto Bean 而直接执行产生 SqlRow 对象或直接从 JDBC ResultSet 读取的 sql 查询很有用。

在典型的近期应用程序中,大约 2% 的查询是 SqlQuery 类型查询。

SqlQuery 和 SqlRow

请注意,使用 SqlQuery,我们可以让 Ebean 添加适合数据库平台的 limit/offset 子句,并且我们可以使用所有映射类型(枚举、java.time、数组类型等)绑定参数。

有关更多信息,请转到 docs / query / sqlquery

String sql = "select id, name, when_active from customer where status = ?";

List<SqlRow> rows = DB.sqlQuery(sql)
  .setParameter(1, "NEW")
  .setMaxRows(100)
  .findList();

for (SqlRow sqlRow : rows) {
  Long id = row.getLong("id")
  String name = row.getString("name")
  Timestamp whenActivated = row.getTimestamp("when_activated")
}

  

SqlQuery 和 RowMapper

或者,我们可以使用 RowMapper 从 JDBC ResultSet 中读取。

String sql = "select id, name, status from customer order by name desc";

DB.sqlQuery(sql)
  .findEachRow((resultSet, rowNum) -> {

   // read directly from ResultSet

   long id = resultSet.getLong(1);
   String name = resultSet.getString(2);

   // do something interesting with the data
 });