0

Struts2 + spring+iBatis上に構築されたJ2EEアプリがあります。すべてのDAOがiBatisを使用しているわけではありません...一部のコードは、データベースと対話するための古いJDBCアプローチを使用しています。すべてのDAOはストアドプロシージャを呼び出しますが、インラインSQLはありません。Oracle Stored Proceduresはカーソルを返すため、コードを大幅に変更する必要があります。

現在のiBatisマッピング(SQL)をOracleに変換するのはかなり簡単です(これを行うためにgroovyスクリプトを使用しました)。また、SQLにあった古いマッピングを呼び出していたJavaコードを変換するのも簡単です。

私たちの問題は、JDBCアプローチをまだ使用している古いDAOを変換することです。とにかくそれらを変更する必要があるので(現在はoracleを使用しているため)、iBatisマッピングに変換することを検討しています。これは良いアプローチですか?これは私たちの側からの多大な努力になるでしょう...

この膨大な努力に取り組むための最善のアプローチは何だと思いますか?

  • 作業を開始して、すべてのDAOで各メソッドの変換を開始する必要があります
  • 各メソッドを調べ、関連情報を解析し、そこからiBatisマッピングを作成する小さなスクリプトを作成しようとする必要があります。
  • メンテナンスと分離の目的で、DAOごとに1つのiBatisマッピングが必要です。

質問が曖昧な場合はお詫び申し上げますが、以前にこの種のことを経験したことがあり、いくつかの指針または「教訓」を持っている人を探しています。

4

2 に答える 2

1

最初にすべきことは、テストで DAO レイヤーをカバーすることです。これにより、変換中に何かを壊したかどうかがわかります。ストアド プロシージャを 1 つの DBMS から Oracle に移動する場合は、DbUnitなどのフレームワークを使用してそのためのテストも作成する必要があります。

変更されないサンプル データが入力された TEST DB インスタンスが必要です。テストの実行が完了したら、同じサンプル データ セットでこの DB を更新できるはずです。これにより、TEST DB が既知の状態にあることが保証されます。次に、入力パラメーターを予想される (正しい) 結果とペアにします。テストはこれらのペアを読み取り、テスト DB インスタンスに対して実行し、期待される結果が返されることを確認します。テストが DB を変更すると仮定すると、テスト スイートの実行の間に DB を更新する必要があります。

第 2 に、すでに Oracle のデータ アクセスの実装を変更している場合は、これを機会として、そのビジネス ロジックの一部を DB から Java に移動してみませんか? DBMS で大規模なコードベースを維持することに関しては、十分に文書化された問題が数多くあります。

各メソッドを見て、関連情報を解析し、そこから iBatis マッピングを作成する小さなスクリプトを作成しようとする必要があります。

これはお勧めしません。特殊なケースごとにスクリプトを微調整するのに費やす時間に加えて、それがもたらすすべてのバグを探し出すのに費やす時間は、思考力のある人間が変換を行うのに費やすほうがよいでしょう。

メンテナンスと分離の目的で、DAO ごとに 1 つの iBatis マッピングが必要です。

それは良い考えです。次に、それらをsqlMapConfigで組み合わせることができます

<sqlMap resource="sqlMaps/XXX.xml" />

これにより、マッピングがより管理しやすくなります。次のように、各 sqlMap で名前空間属性を必ず指定してください。

<sqlMap namespace="User">

オブジェクト グラフをインスタンス化するために sqlMap 間のマッピングを再利用できるようにします (例: ユーザーとそのアクセス許可をロードする場合、User.xml sqlMap は Permission.xml マッピングを呼び出します)。

于 2009-10-31T15:02:35.310 に答える
0

すべての DAO 呼び出しストアド プロシージャ

ここで iBatis が何を買っているのかわかりません。

また、移行が何であるかも明確ではありません。すべてのコードをストアド プロシージャに移動することを決定したので、インライン SQL はもうないということですか? その場合は、iBatis を使用しないでください。すでに Spring を使用している場合は、そのStoredProcedureオブジェクトを使用して Oracle を呼び出し、カーソルをオブジェクトにマップします。

JUnit または、さらに良いことに、TestNG テストを作成するという推奨事項は的を射ています。何かを変更する前にそれを行います。

于 2009-10-31T15:14:09.307 に答える