Ebean& Play Framework 2.3.8:缺少陈述

时间:2015-05-18 15:13:49

标签: java playframework ebean playframework-2.3

我正在使用Play Framework 2.3.8(Java)和Ebean。 我的项目变得很好,我现在正在寻找从我的数据库中获取高级信息的解决方案。

但是,我找不到使用“count()”语句或“group by”语句的方法。我已经检查了ebean文档,但它没有提到这个,所以我的问题是:这些语句是否包含在ebean中?或者我是否需要使用特殊的东西进行此类查询?

我在SQL中的查询如下所示:

"select thing, COUNT(thing) as count from Table group by thing";

非常感谢你的帮助。

2 个答案:

答案 0 :(得分:2)

这里有3种方法,第一种(安东回答)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();

答案 1 :(得分:1)

您可以使用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 - 得到整数,字符串等......