DAOの作成の簡略化

S2Daoでは非常に簡単にDAOを作成することができますが、Genericsでさらに簡略化を図ってみました。

public abstract class Entity implements Serializable {
    // annotation for S2Dao
    public static final String id_ID = "identity";

    private Long id;

    public Long getId() {
        return this.id;
    }

    public void setId(Long id) {
        this.id = id;
    }
}

まず上のようにEntityクラスを用意し、全てのエンティティの基底クラスとします。全テーブルがIDというartificial keyを持つことを前提にしています。
次に、DAOの基底インターフェイスを作成します。

public interface Dao<T extends Entity> {
    public void insert(T item);
    public void update(T item);
    public void delete(T item);

    public void updateList(List<T> items);
    public void deleteList(List<T> items);

    public static final String get_ARGS = "id";
    public T get(Long id);
    
    public List<T> getAll();
}

最後に、各エンティティに対応したDAOを作成します。Employeeというエンティティであれば

public interface EmployeeDao extends Dao<Employee> {
    public static final Class BEAN = Employee.class;
}

と定義するだけで、挿入、更新、IDによる取得といった基本操作がサポートされることになります。

この方法が望ましいものかどうか、自信はありません…。