前回より、大分間があいてしまいましたが前回作成したユーティリティクラスを利用したバージョンです。
- 前回の記事は、こちら。
- 利用しているDAOの記事は、こちら。
[DAO実行クラス]
// vim:set ts=4 sw=4 et ws is nowrap ft=java: package gsf.samples.ibatis.sample012; import java.util.*; import gsf.interfaces.dao.*; import gsf.utils.dao.*; public class IBatisSample012DaoManagerUtilsVersion{ private static class Sample012TestTableDaoExecutor implements DaoExecutor{ private Sample012TestTableDao dao; protected void setSample012TestTableDao(Sample012TestTableDao dao){ this.dao = dao; } public Object execute(){ return dao.findAll(); } } public static void main(String[] args){ Map<String, Class> daoInterfacesMap = new HashMap<String, Class>(); daoInterfacesMap.put("sample012TestTableDao", Sample012TestTableDao.class); List<Sample012TestTable> result = (List<Sample012TestTable>) DaoManagerUtils.executeNoTransaction(new Sample012TestTableDaoExecutor(), daoInterfacesMap); for(Sample012TestTable aRow : result){ System.out.println(aRow); } } }
DaoManagerUtils.executeNoTransactionに、実行されるDaoExecutorの実装とセットしてほしいDaoのマップを渡すと
iBatisのDaoManagerから該当DAOを生成し、内部でリフレクションを使用してバインドしてからDaoExecutor#executeをコールします。
プチDIみたいなものですね。
Sample012TestTableDaoExecutorが複数のDAOの実行と制御を担当するFacadeになります。
一つのExecutorに対して、一つのDAOが関連している場合のみだとあまり意味ないですが
複数のDAOが関連している場合とかは、自動でセットしていく方が楽ですね。