About

ドキュメント

プロジェクト文書

Built by Maven

概要

Domain(ドメイン)とは、値のとり得る範囲(定義域)のことです。 Domaでは、テーブルのカラムの値を、ドメインと呼ばれるJavaオブジェクトで扱います。

一般的なドメインについては、あらかじめ、Domaに組み込まれていますが、 アプリケーションごとに適切なドメインを独自に作成することを推奨します。 あらかじめ組み込まれているドメインクラスは、org.seasar.doma.domainパッケージに具象クラスとして用意されています(クラスの単純名に「Builtin」というプレフィックスを持ちます)。

カスタムドメインクラスの作成

ドメインクラスは org.seasar.doma.domain.Domain インタフェースを実装している必要があります。 このインタフェースを直接実装してもかまいませんが、通常は、 org.seasar.doma.domain パッケージで提供される抽象クラスを継承することで簡単に作成できます。

以下の例では、 org.seasar.doma.domain.BigDecimalDomain を継承して、給料を表すドメインクラスを作成しています。

package example;

import java.io.Serializable;
import java.math.BigDecimal;

import org.seasar.doma.domain.BigDecimalDomain;

public class Salary extends BigDecimalDomain<Salary> {

    private static final long serialVersionUID = 1L;

    public Salary() {
        super();
    }

    public Salary(BigDecimal value) {
        super(value);
    }
}

抽象クラスの型パラメータに対し、ここで定義するクラスを指定することがポイントです。

必要であれば、コンストラクタやsetInternalメソッドで、より厳密に値のとりうる範囲を限定してください。 また、アプリケーションに固有の任意のメソッドも実装できます。

org.seasar.doma.domain.Domain インタフェースやその実装クラスの詳細についてはJavadocを参照してください。

エンティティでの利用

ドメインクラスは、エンティティのプロパティの型を定義するために使用されます。

@Entity
public interface Employee {

    @Id
    Identity employeeId();

    EmployeeNo employeeNo();

    EmployeeName employeeName();

    Salary salary();

    @Version
    VersionNo versionNo();
}

DAOでの利用

ドメインクラスは、Data Access Objectのクラスのメソッドのパラメータの型に使用されます。

@Dao(config = AppConfig.class)
public interface EmployeeDao {

    @Select
    Employee selectBySalary(Salary salary);
}