だから私はプロジェクト(JSF2、Spring3 Core、MVC、Webflow、MyBatis3、RichFaces、およびレガシーOracle 10g)に取り組んでいます。私のすべての問題の原因は、データベースの設計に関係しています。問題は、DB テーブルの大部分でスキーマが変更されていることです (設計が悪いのでしょうか?)。したがって、余分な列の追加と削除をサポートできる必要があります。
これに対応するために、基本的にハッシュマップを拡張するだけのカスタム「ユニバーサル」ドメイン オブジェクトに MyBatis をプルするようにしました。私の現在の問題は、これらのハッシュマップ オブジェクトを更新することです。うまくいく方法はあるはずなのですが、MyBatis に協力してもらえそうです。HashMap.entrySet() と MyBatis を使用してみましたが、役に立ちませんでした。例えば。
UPDATE MYTABLE
SET
<foreach collection="entries" index="i" item="entry" close="" open="" separator=", ">
#{entry.key} = #{entry.value}
</foreach>
WHERE FOO='BAR';
カスタム TypeHandler を試してみましたが、setParameter() では、必要なことを行うのに十分なアクセス権が得られません。ResultHandler では個々の結果に十分にアクセスできなかったので、それも使用できませんでした。
これで、Obj.createUpdateSqlString() のようなことを実行して、リテラル文字列としてマッパーに挿入できることがわかりましたが、これはちょっとしたハックであり、SQL インジェクションに対して無防備なままです。言うまでもなく、それには多くの文字列をエスケープする必要があり、可能な入力の広い範囲を考慮する必要があり、すべての可能性がカバーされていない限り、いくつかの深刻なバグへの扉が開かれます。
それで、これを行う確立された方法はありますか?または、少なくとも中途半端な方法ですか?多くの筋金入りの MyBatis 支持者が、MyBatis が適切に処理できない状況にまだ遭遇したことがないと言っているのを聞いたことがあります。だからMyBatisの専門家は、私を助けてください!!