4/13おこなわれたJSUG(日本Springユーザー会)勉強会での発表内容を公開しました。「SpringでDAO」ということで、僕の周りでDAOを使った開発をするときに使っているテクニックや気にしていることを詰め込みました。
Google GroupのFileページにおいてあります。
発表資料:20070413-勉強会vol2-SpringでDAO_.ppt
ソースコード:20070413-勉強会vol2-SpringでDAO_src.zip
発表ですが、時間が短かったこともあり特急モードで消化したため皆さんの理解もいまいちではないかと危惧しております。ぜひ資料とコードを眺めていただければと思います。
見所はspring-s2daoでしょうか(デモ失敗したけどw)。spring-s2daoへの期待もあったようなのです。今後、S2DAOコミュニティと話をしていきたいと思います。あと、あまり解説できませんでしたがGenericDaoのアイデアはかなり面白いと思います。
アジェンダを書いておきます。
DAOとは
DAOの設計
- 基本パターンはCRUD+Finderメソッド
- パラメタオブジェクトを利用しよう
- JavaSE5を使おう(TypeSafeEnum、Generics)
SpringでDAO
- 実装
-- 基本はORMを使おう(Hibernate、iBATIS、S2DAO)
-- SpringのORMサポートクラスを使おう
- 設定
-- AOPでトランザクション設定しよう(tx:advice、aop:config)
- テスト
-- Springで用意されたテストサポートクラスを使おう(AbstractTransactionalDataSourceSpringContextTests)
-- DAOを使うクラスをテストする場合はモックを使おう(easymock)
GenericDao with Spring
- GenericsとAOPを使ったDAO支援フレームワーク
気になること
- そもそもO/Rマッパって遅い
- 返値ListのFinderでOutOfMemoryになる(Iterator)
- 複数レコードの更新・削除処理が遅い
- キャッシュしたい(ORMもしくはOSCache)
- パフォーマンス計測したい(AOP)
- N+1問題(Lazyロード)
- SQLインジェクション(プリペアドステートメント)
- エンティティ露出問題
