内容へ移動
Cat Paw Software
ユーザ用ツール
ログイン
サイト用ツール
検索
ツール
文書の表示
以前のリビジョン
バックリンク
最近の変更
メディアマネージャー
サイトマップ
ログイン
>
最近の変更
メディアマネージャー
サイトマップ
トレース:
•
oidc
•
s3
java:s2dao
この文書は読取専用です。文書のソースを閲覧することは可能ですが、変更はできません。もし変更したい場合は管理者に連絡してください。
====== S2Dao ====== Seasar2のアスペクト機能を使ったDAOフレームワーク。インターフェースとビーンの定義だけでDAOを実装できる。 ===== Linux上のMySQLでSQLエラー ===== Linux上のMySQLはテーブル名の大文字小文字を区別する。S2Daoによるテーブル名自動取得では大文字小文字を区別した正しいテーブル名が取得できないので、TABLEアノテーションでテーブル名を明示する。(S2DaoのバグかJDBCのバグ、あるいは複合バグらしい?よくわからない) 参考:[[http://ml.seasar.org/archives/seasar-user/2005-March/001673.html|不完全なSQLが生成される]] 環境:S2Dao 1.0.35 + MySQL 4.1 + Connector/J 5.0.3 + Tomcat 5.0.28 ===== 複数のデータソースを使う ===== DAO毎に別のデータソースを参照できる。 データソース毎に名前空間を切り、それぞれの名前空間下でデータソースコンポーネント作成し、DAOインターセプターを適用する。 参考[[http://groovetube.org/index.php?itemid=183&catid=6|S2Daoで複数データソースを使う その2]] ===== INSERT直後のid取得 ===== 以下のコードのように、INSERT直後にAuto Incrementで発行されたID値を取得するためには、メソッドにj2ee.requireTxアスペクトを適用する必要がある。トランザクションが効かないMyISAMでも必要。 <code java> class Sample { public void createHoge() { Hoge hoge = new Hoge(); dao.insert(hoge); int id = hoge.getId(); // j2ee.requiredTxなしの場合、0。 } } </code> j2ee.requiredTxを適用するメソッドは、DAO自体のinsertでも、DAOの呼び出し元のcreateHogeでも良い。 参考:[[http://ml.seasar.org/archives/seasar-user/2006-March/005352.html|S2Dao+MySQLでIDアノテーションが設定できない]] ====== S2DaoTestCase ====== S2Daoに対するユニットテストを支援するツール * データベースにデータを入れてテストする。 * テストデータをエクセル表で管理できる。 * 予想結果もエクセルで管理可能。 * DBを汚さずにDBテストが可能(テストメソッドにトランザクションを掛けて、テスト後に自動的にロールバックする。ただしMyISAMはトランザクションが無いのでデータが置き換わってしまう) ===== 使い方 ===== 以下のデータを用意 * テスト用データの入ったエクセルファイル * SELECT文の予想結果が入ったエクセルファイル(オプション) * テスト対象のDAOクラス * テストクラス エクセルファイル * クラスパスに置く * シート一枚が1テーブルに対応 HogeDaoクラスのテストコード <code java> // 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) // テスト終了後、自動ロールバック } } </code> ===== Eclipse上で管理しているExcelファイルについて ===== ソースフォルダ上に設置しているExcelを変更したとき、クラスパス上のExcelファイルが更新されない場合がある。プロジェクトをCleanして、リビルドすると良い。
java/s2dao.txt
· 最終更新: 2007/10/01 07:59 by
127.0.0.1
ページ用ツール
文書の表示
以前のリビジョン
バックリンク
文書の先頭へ