java:s2dao
目次
S2Dao
Seasar2のアスペクト機能を使ったDAOフレームワーク。インターフェースとビーンの定義だけでDAOを実装できる。
Linux上のMySQLでSQLエラー
Linux上のMySQLはテーブル名の大文字小文字を区別する。S2Daoによるテーブル名自動取得では大文字小文字を区別した正しいテーブル名が取得できないので、TABLEアノテーションでテーブル名を明示する。(S2DaoのバグかJDBCのバグ、あるいは複合バグらしい?よくわからない)
環境:S2Dao 1.0.35 + MySQL 4.1 + Connector/J 5.0.3 + Tomcat 5.0.28
複数のデータソースを使う
DAO毎に別のデータソースを参照できる。
データソース毎に名前空間を切り、それぞれの名前空間下でデータソースコンポーネント作成し、DAOインターセプターを適用する。
INSERT直後のid取得
以下のコードのように、INSERT直後にAuto Incrementで発行されたID値を取得するためには、メソッドにj2ee.requireTxアスペクトを適用する必要がある。トランザクションが効かないMyISAMでも必要。
class Sample { public void createHoge() { Hoge hoge = new Hoge(); dao.insert(hoge); int id = hoge.getId(); // j2ee.requiredTxなしの場合、0。 } }
j2ee.requiredTxを適用するメソッドは、DAO自体のinsertでも、DAOの呼び出し元のcreateHogeでも良い。
S2DaoTestCase
S2Daoに対するユニットテストを支援するツール
- データベースにデータを入れてテストする。
- テストデータをエクセル表で管理できる。
- 予想結果もエクセルで管理可能。
- DBを汚さずにDBテストが可能(テストメソッドにトランザクションを掛けて、テスト後に自動的にロールバックする。ただしMyISAMはトランザクションが無いのでデータが置き換わってしまう)
使い方
以下のデータを用意
- テスト用データの入ったエクセルファイル
- SELECT文の予想結果が入ったエクセルファイル(オプション)
- テスト対象のDAOクラス
- テストクラス
エクセルファイル
- クラスパスに置く
- シート一枚が1テーブルに対応
HogeDaoクラスのテストコード
// wait a minute. public Class HogeDaoTest { private HogeDao dao; // テストターゲット protected void setUp() { include("test.dicon"); // テストクラスと同じディレクトリにあればファイル名だけで良い(らしい) } /** * findAllメソッドのテスト * テスト名の最後にTxを付けると、トランザクションが有効になる */ public void testFindAllTx() { // テストデータをDBにインサート(setUpでコレをやらないのは、このテストメソッドがトランザクション境界だから!) readXlsAllReplaceDb("TestData.xls"); // DAO実行 List<Hoge> actual = dao.findAll(); // 結果予想データをエクセルから読み込む DataSet expected = readXls("findAll_TestExpected.xls"); // 比較、DataSetはListと直接比較可能。 assertEquals(expected, actual) // テスト終了後、自動ロールバック } }
Eclipse上で管理しているExcelファイルについて
ソースフォルダ上に設置しているExcelを変更したとき、クラスパス上のExcelファイルが更新されない場合がある。プロジェクトをCleanして、リビルドすると良い。
java/s2dao.txt · 最終更新: 2007/10/01 07:59 by 127.0.0.1