私は自分でいくつかの研究を行い、基本的な概念を理解しました。しかし、いくつかの洞察は、実際の経験を通してしか得られません。
新しいフレームワークを学ぶ価値があるmyBatisの利点は何ですか?
どのような場合に使用を避けますか?
私は自分でいくつかの研究を行い、基本的な概念を理解しました。しかし、いくつかの洞察は、実際の経験を通してしか得られません。
新しいフレームワークを学ぶ価値があるmyBatisの利点は何ですか?
どのような場合に使用を避けますか?
回答:
あなたが達成しようとしていることを考慮してください。通常、Command Query Response Segregation モデルは、複雑なドメインに適しています。
その理由は、通常、次の2つのいずれかを実行しようとしているためです。
Hibernateはケース1でうまく機能し、POJOを作成して永続化/更新することができます。ドメインが非常に大きい場合を除き、これも迅速に行われます。
myBatisは、単に答えが必要なクエリ(ケース2)のフェッチに最適です。Hibernateはオブジェクトグラフ全体をロードしようとするため、LazyLoadingトリックを使用してクエリをチューニングし、大規模なドメインで動作を維持する必要があります。これは、エンティティオブジェクトを返さない複雑な分析クエリを実行する場合に重要です。この場合、HibernateはBigDecimalのような巨大なデフォルト型を持つSqlQueryとBeanトランスフォーマーのみを提供しますが、myBatisは単純なPOJO非エンティティに簡単にマッピングできます。
これら2つのケースは、ドメインデータを変更するコマンドと、一部のデータを取得するだけの応答との違いです。
したがって、これら2つのケースと、アプリケーションが何をするかを検討してください。単純なドメインがあり、情報を取得するだけの場合は、myBatisを使用します。複雑なドメインがあり、エンティティを永続化する場合は、Hibernateを使用します。両方を行う場合は、ハイブリッドアプローチを検討してください。それは私たちがコントロール下に保つために何千ものエンティティを持つプロジェクトで使用するものです。;)
MyBatisはSQL中心です。SQLステートメントを呼び出し、結果(テーブル)をオブジェクトツリーにマッピングします。
主な利点は、ORMではないことです。テーブルをオブジェクトにマップしないため、ormインピーダンスの不一致は発生しません。複雑なデータベースやレガシーデータベース、またはストアドプロシージャ、ビューなどのdb機能を使用するのに適しています。
非常にシンプルで簡単に習得できるので、スキルの低いチームにも適しています。冬眠の第一人者が必要ないからです。
jpetstore 6をご覧くださいhttp://mybatis.org/spring/sample.html
ので、質問が参照に私のコメントは、ここで私はそれを書い念頭に置いていたものです。
まず第一に、それはあなたの元の質問の文脈から導き出されます。他の状況では、別のアドバイスをすることができます。私にMyBatisを提案させたポイントはこれです。
...パフォーマンスの問題が発生しました。
データベースのパフォーマンスを向上させるために、休止状態をドロップしてプレーンなJdbcを選択することにしました...
過去のプロジェクトの1つで、私たちのチームはあなたが説明したような理由でHibernateからの移行を検討しています。あなたと同様に、JDBCに切り替えるつもりでしたが、別のプロジェクトの同僚からMyBatisを勧められました。チームは、問題が発生した場合に備えてJDBCをフォールバックオプションとして維持しながら、試してみることにしました。
その瞬間、私はMyBatisについて何も知りませんでしたが、JDBCで十分な経験があり、それが仕事を確実に果たすことができました。それにもかかわらず、私はMyBatisを試してみるという考えを強く支持していました。主な理由は、私の過去の経験では、JDBCで記述しなければならない定型コードの量が気が遠くなるからです。
とにかく、MyBatisを試してみましたが、宣伝どおりに機能しました。それがあなたが尋ねるコメントを書いた理由です。
テクノロジーの詳細な概要を説明すること、または何らかの方法でその優位性を賞賛することを期待する場合-申し訳ありませんが、それはできません。できれば-短いコメントを与えるのではなく、元の質問に対する別の回答にそれをすでに書いています。私は当時MyBatisについて何も知らなかったと言いました-残念ながらそれについての知識はまだほとんどありません。Hibernateからの移行は他のチームメンバーによって行われたため、作業中のコードには影響しませんでした。重要なポイントを思い出しただけです(コメントに基づいて)、1)MyBatisはHibernateの問題を解決した、2)独自の問題を導入しなかった、3)定型コードの記述を避けることができたJDBCに切り替える場合に備えて期待していました。それで全部です。
Hibernateはあまりにも多くの魔法、予期しない動作、大きな学習曲線でよく知られています。他にもシンプルさを重視したフレームワークがあり、管理することができます。
myBatisはその1つであり、私のプロジェクトMentaBeanは別のプロジェクトです。私はそれについて役立つブログ記事を書きました。
5年前にHibernate 3を使用してデータの読み込みおよびデータ変換プロジェクトにHibernateを使用しましたが、それは素晴らしいと思いました。私は小さなeコマースアプリケーションをやっていて、Hibernate 4を使ってみましたが、非常にがっかりしました。ツールを削除し、IDEに緊密に統合しました。MyBatisを試してみたところ、すべてが一晩で機能するようになりました。アプリケーションに簡単に統合できることにとても満足しています。Hibernateは肥大化しすぎていると思うので、この時点でHibernateではなくEJB 3を使用します。