問題タブ [ibatis]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
upgrade - iBatis 3 は下位互換性がありませんか?
- API に下位互換性がない理由を知っている人はいますか?
- まだスレッドセーフですか?
- 2.x から 3.x への移行に関するドキュメントを知っている人はいますか?
java - Spring+iBatisで構築されたDAOを統合テストする方法
タイトルが誤解を招く可能性のある質問をしたので、詳細な内容でもう一度質問を試みます。(質問が長いようですが、ご容赦ください)
私がやろうとしていること:DAOのテストケースを書いて、それを機能させたいだけです。コンテナ(アプリサーバー)内でDAOが正常に機能することはわかっていますが、テストケースからDAOを呼び出すと機能しません。コンテナの外にあるからだと思います。
私のspring-for-iBatis.xmlのもの
私のsql-map-config-oracle.xmlのもの
私の抽象クラス:
私のDAO:
Mytests
このコードスニペットで問題全体を提示しようとしました。データベースへの接続を取得できないため、テストは失敗します...コンテナの外部にあるためです。依存性注入をより有効に活用するために設計を修正できることを私は知っています。このスニペットに基づいて、テストが機能するようにどのような改善を行うことができるかを教えていただけますか?
私はこれに苦労してきました、そして本当にいくつかの助けをいただければ幸いです。
PS:setSqlMapClientTemplate()
DAOへの呼び出しを単純MyDAO myd = new MyDAO()
にしたいので、使用する必要がありました。DAOごとにインターフェイスを作成したくありません。
java - 行が見つからない場合、iBatis がオブジェクトを設定しない
2 つのカーソルを返すストアド プロシージャを実行していますが、いずれにもデータがありません。次のマッピング xml があります。
最初の結果セットは HashMap に配置されています...2 番目の結果セットはMyBean
クラスに配置されています。
私のDAOのコードは次のとおりです。
上記の最後の行で..私のコードは失敗します。2番目のカーソルに行がなく、リストに何も入れられないため失敗します。HashMap
ただし、最初のカーソルも何も返しませんが、結果が最初のカーソルのリストに入れられているため、少なくともHashMap
その中にオブジェクトがあります..
この違いはなぜですか?行が返されない場合でも、iBatis に MyBean のオブジェクトをリスト内に配置させる方法はありますか? それとも、DAO でこれを処理する必要がありますか... このような DAO がたくさんあるので、DAO で処理することは避けたいと思います。
java - これはiBatis + springで可能ですか
スプリングサポート付きのアイバティスを使用する通常の慣用句は次のとおりです。というか、私はこうしています。もっと良い方法があれば教えてください。
豆のxml:
インターフェース:
ダオ:
DAO の呼び出し:
これはうまくいきますが、インターフェースの必要性を理解していません。
質問
- インターフェースを写真から取り除いても、まだ機能していますか?
DAOへの呼び出しが単純になるように設計/設定を変更できますか(基本抽象クラスが必要な場合でも)
MyUserAccessDAO mydao = new MyUserAccessDAO(); mydao.getUserReports("何とか");
私は数日前にこれらの質問をしましたが、2日間苦労してさらに多くのことを見つけた後、この質問をもう一度しました. 可能であれば、変更/追加するコードのスニペットを提供してください。
すべてがコンテナー内にあるため、この設計での単体テストは機能しません。それが機能するようになったら、それを質問にも追加します(情報目的で)。
また、Spring + Ibatis を機能させようとしている人にとっては...これは、開始するのに適した場所になると思います。
編集:
上で述べたように、DAO を次のように呼び出したいと思います (または、コンストラクターのパラメーターとして何かを渡しても問題ありません)。
上記を達成するには、DAOに次の行があります
このためのテストケースを作成できるようにするには、何を上書きする必要があるかを知る必要があります。テスト ケースはコンテナ内の何にもアクセスできないため、Driver Datasource に依存します...
ここではベストプラクティスに反しているので...テストケースのためだけにDAOを変更してもかまいません...
java - 春のxmlの外でSqlMapClientを設定する方法
私のxml構成には次のものがあります。コンテナの外部でユニット/統合テストを行っているため、これらをコードに変換したいと思います。
xml:
上記のxmlからものを取得するために使用したコード:
私のコード(単体テスト用):
xml が使用されている場合SqlMapClient
は、セットアップするクラスであり、どうして変換SqlMapClientFactoryBean
できないのですか?SqlMapClient
cxf - Web サービスでパスを確認する方法
cxf webservices を使用しています。サービス パス @Path'/summary/abc/{xyz}/name/{login}' があります。
誰かが間違ったURLを与えたときにカスタムエラーメッセージを生成したい
「/summary/ab/{xyz}/na/{login}/」
java - コンテナーの外側で Spring Bean をインスタンス化する (テスト用)
私は私のapplicaionContext.xmlで以下を持っています
次に、私のコードには次のものがあります。
これを行うと、次のエラーが発生します。
クラス パス リソース [applicationContext.xml] で定義された名前が 'myMapClient' の Bean の作成中にエラーが発生しました: init メソッドの呼び出しに失敗しました。ネストされた例外は java.lang.NoClassDefFoundError: com/iplanet/ias/admin/common/ASException です
なぜそのクラスを探しているのかわかりませんか?私はコンテナの外ですべてをやろうとしています。したがって、そのクラスを探すべきではありません...しかし、それを機能させるために、ASExceptionというクラスを探してみたので、クラスパスに配置できましたが、ASExceptionクラスを見つけることができませんでした。
ポインタはありますか?
スタック トレースと私のコンパイル テスト/実行テスト ライブラリの画像
解決策の編集
: すべてがコンテナーの外側にあると思っていましたが、コンテナーの外側にないものが 1 つあります。
プロパティ configLocation に注目してください。
sql-map-config-oracle.xml の実際の内容は
JNDI はそこにある必要はありません。
sql-map-config-oracle.xml は単純に次のようにする必要があります。
java - com iplanet ias JAR
私は過去数日間、これに苦労してきました。コンテナー外で DAO をテストしようとしていますが、テスト ケースの実行中に次のエラーが発生します。
クラス パス リソース [applicationContext.xml] で定義された名前が 'SqlMapClient' の Bean の作成中にエラーが発生しました: init メソッドの呼び出しに失敗しました。ネストされた例外は java.lang.NoClassDefFoundError: com/iplanet/ias/admin/common/ASException です
NB を使用してテストを実行しています。上記のクラスがテスト ケースの実行時のクラス パスにある必要があると人々は言っています。しかし、その瓶が実際にどこにあるのか、私は絶対に見つけることができません...?? コンテナーのクラスパスにあるすべての jar と、プロジェクトの lib フォルダーにある jar を、単体テストのランタイム クラスパスに含めました。それでも同じエラーが発生します。
このJARのグーグルも機能しませんでした。
たぶん、誰かがこのフリーキンジャーをどこから入手できるか知っている. そしてうまくいけば、それは私の問題を解決しました。
spring - Ibatis2とテストコンテキスト
SpringプロジェクトでIbatisの設定に愚かな問題があります。これらすべてがどのように設定されたかについて私に飛びついてはいけません。私は「社内プロジェクト構造ポリシー」に従っているだけです。
これが構造です。アプリケーションで使用されるすべての構成ファイルを含む「src/ main / resources / META-INF /」フォルダーがあり、次に「src / test / resources /META-INF/ 」があります。 "これには、単体テストを実行するためのさまざまな設定を持つ構成ファイルのみが含まれています。
この場合、ファイルは1つだけで、src /main/resources/META-INF/spring/application-config.xmlがsrc/ test /resources/META-INF/spring/test -application -config.xmlになりました。その部分はうまく機能するので、2つの間の小さな違いについては説明しません。
test-application-config.xmlは、src / main / resources / META-INF / spring /data-access-config.xmlファイルを正常にインポートします。これにより、src / main / resources / META-INF / ibatis /が使用されます。 sqlmap-config.xmlは正常に...その後は地獄に行きます。
これまで、Springを使用してクラスパス内の次の構成ファイルを検索していましたが、sqlmap-config.xmlにアクセスすると、Springフレームワークをibatisフレームワークに残します。これにより、Springフレームワーク内で定義されたリソースファイルがクラスパス(それが意味するものは何でも、ドキュメントから取得されます)。
sqlmap-config.xml内には、 src / main / resources / META-INF / ibatis /mappingフォルダー内にある使用しているいくつかのリソースファイルが定義されています。それらは次のように参照されます:
アプリを通常どおり実行すると正常に機能しますが、JUnitテストケースを実行すると、ファイル/META-INF/ibatis/mapping/MyObject.xmlが見つからないことを示すIO例外が発生します。
sqlmap-config.xmlのパスを「mapping/MyObject.xml 」に変更しようとしましたが、役に立ちませんでした。また、Springクラスパスプレフィックス「classpath:META-INF / ibatis / mapping / MyObject.xml」を使用しようとしましたが、どちらも機能しませんでした。
アプリとjunitの両方で機能するようにIbatisを適切に設定する方法について誰かが知っているでしょうか?
ありがとう。
java - OracleとMySQLの両方をサポート:SQL構文はどの程度似ていますか?
プロジェクトでOracleを使用しており、MySQLもサポートしたいと考えています。彼らのSQL方言はどれくらい近いですか?
体操をあまりしなくても、両方に同じSQLソースを使用することさえ可能でしょうか?
詳細:
- SQLステートメントをリソースファイルにクリーンに分離する永続マネージャーであるiBatisを使用しています。ただし、SQLレベルで作業します。これには、長所(および短所)があります。
- 方言の違いから完全に保護するHibernateのようなオブジェクトリレーショナルマッパーに移動したくない。
- OracleSQLの汎用サブセットを維持するように努めました。
- PL/SQLはありません。
- ストアドプロシージャやトリガーは使用しません(とにかく)。
- チェック制約、一意の制約、および外部キー制約を使用します。
- ONDELETECASCADEを使用します。
- トランザクションを使用します(iBatis APIレベルで実行されます)。
- クエリでいくつかのOracleタイムスタンプ関数を呼び出します。
- MySQLでInnoDBストレージエンジンを使用します(トランザクションと制約をサポートします)。
それで、あなたの考えは何ですか?方言ごとに1つずつ、2つの異なるiBatis SQLリソースファイルのセットを維持する必要がありますか、それともMySQLとOracleの両方をサポートするSQLの単一のセットを持つことは可能ですか?
最終更新:すべての回答、特に相違点に関するTroelsArvinのページへのポインタに感謝します。標準が標準ではないのは本当に残念です。私たちにとっての問題は、MySQLの自動インクリメントとOracleシーケンス、MySQLLIMITとOracleRowumber()、そしておそらく1つか2つの奇妙な関数であることがわかりました。@mjvが指摘しているように、SQL-92を使用していることを確認するために、他のほとんどすべてを非常に簡単に転送する必要があります。より大きな問題は、一部のクエリを各DBMSで異なる方法で手動で最適化する必要がある場合があることです。