8. DAO の設計
• DAO のインターフェース設計
– CRUD + Finder メソッド
– パラメタオブジェクトを利用する
– Tiger 便利
• TypeSafeEnum
• Generics
9. DAO の設計
• CRUD + Finder メソッド
– CRUD ( Create 、 Read 、 Update 、 Delete
)は、 TransferObject をまるごとやりとり
• Read は ID による検索
– ID 以外の検索は Finder メソッドとして、ある
程度の目的別に用意
10. DAO の設計
• パラメタオブジェクトを利用する
– DAO の Finder メソッドにおいて、パラメタ
が増えるたびにインターフェースが変わるの
はいや
– そこでパラメタオブジェクトとして抽象化
• パタメタが増えても、 DAO のインターフェースに
public 影響を与えない
interface BasicDao {
List findByCriteria(BasicFindCriteria criteria);
}
public class BasicFindCriteria {
private String someKey;
}
11. DAO の設計
• Tiger 便利( JavaSE5 )
– 型重要
– TypeSafeEnum
public enum AnyEnum {
type1, type2
}
– Generics
public interface BasicDao {
List<BasicTransferObject>
findByCriteria(BasicFindCriteria criteria);
}
43. GenericDao with Spring
• GenericDao とは
– Generics と AOP を使った DAO 支援フレーム
ワーク
• http://www-06.ibm.com/jp/developerworks/java/060705/j_j-genericdao.shtml
– 実装クラスレスで DAO が作れちゃう。 O/R
マッパのラッパとして非常に便利
– Spring と一緒に使うべし
• 今回は Hibernate を利用
44. GenericDao with Spring
• 実装サンプル
– Generics を使うことで、型つきの CRUD メ
ソッドが準備される
– Finder メソッドは、メソッド名と同じ query
を用意する
45. GenericDao with Spring
• インターフェースとマッピングファイル
だけ interface ElectricGuitarGenericDao
public
extends GenericDao<ElectricGuitar, String>{
public ElectricGuitar findByName(String name);
public List<ElectricGuitar> findAll();
}
<hibernate-mapping package="jp.springframework.vol2.domain">
<class name="ElectricGuitar" table="ELECTRIC_GUITAR">
<id name="id" column="ID" type="string" length="40">
…
</class>
<query name="ElectricGuitar.findByName">
<![CDATA[select e from ElectricGuitar e where e.name = ? ]]>
</query>
<query name="ElectricGuitar.findAll">
<![CDATA[select e from ElectricGuitar e order by e.price]]>
</query>
</hibernate-mapping>