DAOインタフェース

データアクセスオブジェクト(DAO)は、データベースへの構造化されたアクセスを提供するインターフェースです。

DAOの定義

DAO は @Dao アノテーションが付けられたインタフェースとして定義されます。

DAOインターフェースの実装クラスは、コンパイル時にアノテーションプロセッサによって自動生成されます。

クエリ定義

クエリ は、アノテーションを使用して定義できます。

Javaコード内で動的にクエリを構築する必要がある場合は、デフォルトメソッド 内で クエリビルダクエリDSL を使用できます。

デフォルトメソッド

デフォルトメソッドではJavaコードを自由に記述できます。

DAOインスタンスを引数として Config.get を呼び出すことで、DAOインスタンスに関連付けられた Config インスタンスを取得できます。

@Dao
public interface EmployeeDao {

    default int count() {
        Config config = Config.get(this);
        SelectBuilder builder = SelectBuilder.newInstance(config);
        builder.sql("select count(*) from employee");
        return builder.getScalarSingleResult(int.class);
    }
}

実装クラスはコンパイル時にアノテーションプロセッサによって自動生成されます。これらの実装クラスは直接インスタンス化して使用することができます。ただし、設定クラスが依存性注入(DI)コンテナによって管理されている場合、DIコンテナが実装クラスのインスタンス化を制御する必要があります。

void doSomething() {
    Config config = getConfig();
    EmployeeDao employeeDao = new EmployeeDaoImpl(config);
    Employee employee = employeeDao.selectById(1);
}

デフォルトでは、実装クラス名はインターフェース名に Impl を付けたものです。パッケージ名とサフィックスをカスタマイズする方法については アノテーション処理 を参照してください。

DAOインターフェースは、エンティティクラスと1対1の関係で定義する必要はありません。1つのDAOインターフェースは、複数のエンティティクラスを処理できます。

@Dao
public interface MyDao {

    @Select
    Employee selectEmployeeById(int id);

    @Select
    Department selectDepartmentByName(String name);

    @Update
    int updateAddress(Address address);
}