我的项目中有一个模型类“Journey”,它有几种删除,创建和列出所有旅程的方法。我正在使用heroku和postgresql数据库。我需要编写一个方法,它将返回所有具有与指定地址类似的地址的旅程。我知道查询结构通常类似SELECT address FROM Journey WHERE address ~~ arguement
,但我不知道在play框架中有什么功能可以做到这一点。
*public static void search(String address){
//query
//return matching journey results
}*
答案 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
),istartsWith
,iendsWith
,ieq
,icontains
和iexampleLike
。它们与开头没有i
的版本相同。
您也可以预览in the API。