Daoインタフェース¶
Data Access Object (Dao) はデータベースアクセスのためのインタフェースです。
デフォルトメソッド¶
デフォルトメソッドでは任意の処理を記述できます。
Config.get にDaoのインスタンスを渡すとDaoに関連づけられた Config インスタンスを取得できます。
@Dao(config = AppConfig.class)
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コンテナで制御してください。
EmployeeDao employeeDao = new EmployeeDaoImpl();
Employee employee = employeeDao.selectById(1);
デフォルトでは、実装クラスの名前はインタフェースの名前に Impl をサフィックスしたものになります。 パッケージやサフィックスを変更するには 注釈処理 を参照してください。
デフォルトコンストラクタを使用した場合は、 @Dao の config 要素に指定した設定により DataSource が決定されますが、 特定の DataSource を指定してインスタンス化することも可能です。
DataSource dataSource = ...;
EmployeeDao employeeDao = new EmployeeDaoImpl(dataSource);
Employee employee = employeeDao.selectById(1);
また同様に、 Connection を指定してインスタンス化することも可能です。
Connection connection = ...;
EmployeeDao employeeDao = new EmployeeDaoImpl(connection);
Employee employee = employeeDao.selectById(1);
Daoインタフェースはエンティティクラスと1対1で結びついているわけではありません。 ひとつのDaoインタフェースで複数のエンティティクラスを扱えます。
@Dao(config = AppConfig.class)
public interface MyDao {
@Select
Employee selectEmployeeById(int id);
@Select
Department selectDepartmentByName(String name);
@Update
int updateAddress(Address address);
}