Ebean & Play Framework 2.3.8:缺少语句
Ebean & Play Framework 2.3.8 : Missing statements
我正在使用 Play Framework 2.3.8 (Java) 和 Ebean。
我的项目进展顺利,我现在正在寻找解决方案以从我的数据库中获取高级信息。
但是,我找不到使用 "count()" 语句或 "group by" 语句的方法。我检查了 ebean 文档,但没有提到这一点,所以我的问题是:这些语句是否包含在 ebean 中?或者我需要为这种查询使用一些特殊的东西吗?
我在 SQL 中的查询如下所示:
"select thing, COUNT(thing) as count from Table group by thing";
非常感谢您的帮助。
您可以使用http://www.avaje.org/static/javadoc/pub/com/avaje/ebean/SqlQuery.html
String sql = "select thing, COUNT(thing) as count from Table group by :thing";
SqlQuery sqlQuery = Ebean.createSqlQuery(sql);
sqlQuery.setParameter("thing", "FOO");
// execute the query returning a List of MapBean objects
List<SqlRow> list = sqlQuery.findList();
然后您可以使用 JDBC 中的 SqlRow
-fashion - 获取整数、字符串等...
这里有 3 种方法,第一种(由 Anton 回答)使用 SqlQuery
,第二种 - 不幸的是无法访问别名字段,第三种 - 允许您将别名字段分组并映射到 Transient
模型字段也是如此。
// First approach: returns list of `raw` rows so it's mpst flexible
List<SqlRow> rows = Ebean
.createSqlQuery("SELECT id, count(bar) AS bar_count FROM foo WHERE 1 GROUP BY bar")
.findList();
// Second uses `GROUP BY`, returns entities BUT without alias fields
List<Foo> foos = Ebean
.createQuery(Foo.class, "WHERE 1 GROUP BY bar")
.select("id")
.findList();
// or just...
List<Foo> foos2 = Foo
.find.where("1 GROUP BY bar")
.findList();
// Third, returns entities, alias fields can be mapped to model as well (requires @Transient annotation for these fields in model)
RawSql rawSql = RawSqlBuilder
.parse("SELECT id, count(bar) FROM foo WHERE 1 GROUP BY bar")
.columnMapping("id", "id")
.columnMapping("count(bar)", "bar_count")
.create();
com.avaje.ebean.Query<Foo> query = Ebean.find(Foo.class);
query.setRawSql(rawSql);
List<Foo> foosRaw = query.findList();
我正在使用 Play Framework 2.3.8 (Java) 和 Ebean。 我的项目进展顺利,我现在正在寻找解决方案以从我的数据库中获取高级信息。
但是,我找不到使用 "count()" 语句或 "group by" 语句的方法。我检查了 ebean 文档,但没有提到这一点,所以我的问题是:这些语句是否包含在 ebean 中?或者我需要为这种查询使用一些特殊的东西吗?
我在 SQL 中的查询如下所示:
"select thing, COUNT(thing) as count from Table group by thing";
非常感谢您的帮助。
您可以使用http://www.avaje.org/static/javadoc/pub/com/avaje/ebean/SqlQuery.html
String sql = "select thing, COUNT(thing) as count from Table group by :thing";
SqlQuery sqlQuery = Ebean.createSqlQuery(sql);
sqlQuery.setParameter("thing", "FOO");
// execute the query returning a List of MapBean objects
List<SqlRow> list = sqlQuery.findList();
然后您可以使用 JDBC 中的 SqlRow
-fashion - 获取整数、字符串等...
这里有 3 种方法,第一种(由 Anton 回答)使用 SqlQuery
,第二种 - 不幸的是无法访问别名字段,第三种 - 允许您将别名字段分组并映射到 Transient
模型字段也是如此。
// First approach: returns list of `raw` rows so it's mpst flexible
List<SqlRow> rows = Ebean
.createSqlQuery("SELECT id, count(bar) AS bar_count FROM foo WHERE 1 GROUP BY bar")
.findList();
// Second uses `GROUP BY`, returns entities BUT without alias fields
List<Foo> foos = Ebean
.createQuery(Foo.class, "WHERE 1 GROUP BY bar")
.select("id")
.findList();
// or just...
List<Foo> foos2 = Foo
.find.where("1 GROUP BY bar")
.findList();
// Third, returns entities, alias fields can be mapped to model as well (requires @Transient annotation for these fields in model)
RawSql rawSql = RawSqlBuilder
.parse("SELECT id, count(bar) FROM foo WHERE 1 GROUP BY bar")
.columnMapping("id", "id")
.columnMapping("count(bar)", "bar_count")
.create();
com.avaje.ebean.Query<Foo> query = Ebean.find(Foo.class);
query.setRawSql(rawSql);
List<Foo> foosRaw = query.findList();