簡體   English   中英

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";

非常感謝你的幫助。

在這里,您有3種方法,一種是SqlQuery (由Anton回答),第二種-不幸的是,沒有訪問別名字段,第三種-允許您將別名字段分組並映射到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();

您可以使用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-fashion中的SqlRow s-獲取整數,字符串等。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM