2

私のプロジェクトにはモデル クラス「Journey」があり、すべてのジャーニーを削除、作成、および一覧表示するメソッドがいくつかあります。heroku と postgresql データベースを使用しています。指定した住所と類似した住所を持つすべての旅程を返すメソッドを作成する必要があります。クエリ構造が通常次のようなものになることSELECT address FROM Journey WHERE address ~~ arguementは知っていますが、play フレームワークでこれを行うためにどの関数が存在するかはわかりません。

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

1 に答える 1

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 の APIには他の可能性もありますが、いずれにせよ、どのアプローチが最適かを宣言する必要があります。

computer's databaseところで、この ORM に慣れるための例として、既存のサンプル アプリケーションを調べる価値があります。

編集

大文字と小文字を区別しない検索には、追加の式、つまりilike(の代わりにlike) 、istartsWithiendsWith、およびieqがあります。彼らは最初に何バージョンなしで同じことをします。icontainsiexampleLikei

API でプレビューすることもできます。

于 2013-02-19T18:57:01.200 に答える