1つのDaoで複数のエンティティを扱ったりジェネリックなDaoを利用したり
S2DaoはDaoとBean(エンティティ)の関係は基本的に1対1ですが、Domaでは1対nもokにしてます。
3つのテーブルしか扱わないとかだと、1つのDaoで十分かも。
@Dao(config = AppConfig.class) public interface AppDao { @insert int insert(Employee employee); @insert int insert(Department department); @insert int insert(Address address); ... }
ふつうは、1対1にすると思いますが、1対1に縛る理由もなかったのでこうしました。
Daoの作り方でお奨めなのはジェネリックなDaoを使うことです。ジェネリックなDaoは@GenericDaoを注釈してつくります。ジェネリックなDaoはエンティティを表す型パラメータを1つ受け取れます。
@GenericDao public interface AppGenericDao<E> { @Insert int store(E e); @Update int modify(E e); @Delete int remove(E e); ... }
最初、ジェネリックなDaoはフレームワーク側で提供しようと思いましたが、メソッドの名前を自由に決めたい人もいると思って、この方式にしました。この例では、名前をよくあるinsertやupdateではなくstoreとmodifyにしてみました。
個々のDaoはジェネリックなDaoを継承して作ります。
@Dao(config = AppConfig.class) public interface EmployeeDao extends AppGenericDao<Employee> { @Select List<Employee> selectAll(); ... }
利用する側はこうなります。
Employee employee = new Employee_(); employee.id().set(1); ... EmployeeDao dao = new EmployeeDao_(); dao.store(employee);
ジェネリックなDaoを使うと、Daoとエンティティを1対1にしたほうがわかりやすくなりますね。