db4objects その2(クエリの準備)

先日のエントリではdb4oをローカルモード(ファイルモード)でオープン/クローズする方法と、基本的なインタフェースについて書いた。
今回からはその特徴的なクエリに関して書く予定だが、その前にクエリの例を書くためにDBに格納するオブジェクトを用意する必要がある。チュートリアルと同じでは面白くないので自分の趣味だけで以下のインタフェースと実装クラスを用意してみた。

interface IPlayer {
    String getName();
    void setName(String name);
    String getTeam();
    void setTeam(String team);
    String getPosition();
    void setPosition(String position);
    int getHits();
    void setHits(int hits);
    double getAverage();
    void setAverage(double average);
}
public class PlayerImpl implements IPlayer {
    private String name;
    private String team;
    private String position;
    private int hits;
    private double average;
    public String getName() {
        return this.name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getTeam() {
        return this.team;
    }
    public void setTeam(String team) {
        this.team = team;
    }
    public String getPosition() {
        return this.position;
    }
    public void setPosition(String position) {
        this.position = position;
    }
    public int getHits() {
        return this.hits;
    }
    public void setHits(int hits) {
        this.hits = hits;
    }
    public double getAverage() {
        return this.average;
    }
    public void setAverage(double average) {
        this.average = average;
    }
    public String toString() {
        return "PlayerImpl ["
        + "name=" + this.name
        + ", team=" + this.team
        + ", position=" + this.position
        + ", hits=" + this.hits
        + ", average=" + this.average
        + " ]";
    }
}

※4/19 HitsとAverageを追加

db4oのような純粋なOODBの場合、オブジェクトはそのままの形で登録されるため、データベースに決まったスキーマを登録する必要も無いしオブジェクトのデータを格納するテーブルを作る必要すらない。RDBを使う場合、クラス設計の他にDB設計(スキーマ設計)が必要になる訳であり、この部分がOODBの最大の利点の一つだと私は思う。

さて、db4oのクエリは大きく分けて以下の3つの方法がある。

  • Query by Example (以降QBE)
  • Native Query (以降NQ)
  • Simple Object Database Access Query(以降SODA)

次回は簡単なサンプルを交えてdb4oのクエリを試してみる予定だ。

※ドキュメントには略称のSODAのみの記述だが"Simple Object Database Access Query"の略語だろう