Play Framework数据库搜索

时间:2013-02-19 16:56:06

标签: java playframework-2.0 ebean

我的项目中有一个模型类“Journey”,它有几种删除,创建和列出所有旅程的方法。我正在使用heroku和postgresql数据库。我需要编写一个方法,它将返回所有具有与指定地址类似的地址的旅程。我知道查询结构通常类似SELECT address FROM Journey WHERE address ~~ arguement,但我不知道在play框架中有什么功能可以做到这一点。

*public static void search(String address){
//query
//return matching journey results
}*

1 个答案:

答案 0 :(得分:5)

您需要使用模型的Finder作为示例:

package models;

import play.db.ebean.Model;

import javax.persistence.*;

@Entity
public class Journey extends Model {

    @Id
    public Integer id;

    public static Finder<Integer, Journey> find
            = new Model.Finder<>(Integer.class, Journey.class);

    // other fields
    public String address;
    public String country;

}

这样您就可以轻松选择记录:

List<Journey> allJourneys = Journey.find.all();
List<Journey> searchedJourneys = Journey.find.where().like("address", "%foo%").findList();
Journey firstJourney = Journey.find.byId(123);

在您的基本情况下,您可以将其添加到您的模型中:

public static List<Journey> searchByAddress(String address){
    return find.where().like("address", "%"+address+"%").findList();
}

等。它返回带有关系的整个对象,因此在大数据集中它可能太重,你甚至可以使用Finder的链式方法(如select()fetch()等)来使用更优化的查询来指出你的数据现在需要。

Ebean's API还有其他可能性,无论如何你需要声明哪种方法最适合你。

BTW,值得研究一下现有的示例应用程序,例如computer's database来熟悉这个ORM。

修改

对于案例内部搜索,还有其他表达式,即ilike(而不是like),istartsWithiendsWithieqicontainsiexampleLike。它们与开头没有i的版本相同。

您也可以预览in the API