MyBatisとJPAの違いは何ですか?



What Is Difference Between Mybatis



MyBatisは完全なアノテーションバージョンとxmlバージョンに分かれています完全なアノテーションバージョンは小さなプロジェクトに適しており、メソッドにアノテーションを直接追加し、アノテーションにSQLを書き込みます

倉庫保管
リポジトリパターンは、ドメイン駆動設計のもう1つの古典的なパターンです。初期の頃は、データアクセス層にDAOという名前を付けることがよくあり、SpringData JPAではリポジトリと呼ばれていました。これは偶然ではありませんでしたが、設計者はそうするつもりでした。
SpringData JPAに精通している友人は、インターフェイスがJpaRepositoryインターフェイスを継承すると、一般的に使用されるデータ操作メソッド、findAll、findOne、saveなどのセットが自動的に含まれることを知っています。
では、倉庫保管とDAOの違いは何ですか?これは、いくつかのレガシー問題といくつかのソフトウェア設計要因に言及することです。このSpringForAllの問題では、次のような便利で拡張可能なAPIを使用してSpringDataJPAに多くの重点を置くことが期待できます。
パブリックインターフェイスOrderRepositoryはJpaRepositoryを拡張します{



findByOrderNoAndXxxx(String orderNo,Xxx xx) @Transactional @Modifying(clearAutomatically = true) @Query('update t_order set order_status =?1 where id=?2') int updateOrderStatusById(String orderStatus, String id)

}

ただし、これはSpringData JPAの妥協案であり、この機能のサポートは推奨を意味するものではないことを強調したいと思います。これはドメイン駆動設計の概念に適合しないためです。 SpringData JPAは、データベーススクリプトのコレクションではなく、リポジトリをデータウェアハウスとして使用するように設計されていることに注意してください。 findByOrderNoAndXxxxメソッドは、次のセクションで説明するJpaSpecificationExecutorに置き換えることができ、updateOrderStatusByIdメソッドはfindOne + saveに置き換えることができます。これは複雑だと思います。実際のビジネスシナリオを想像してみてください。変更操作には、通常、1つのフィールド変更のみが含まれるわけではありません。 findOne + saveを使用すると、SQLステートメントの記述方法を気にすることなく、より複雑なビジネスオペレーションを完了することができます。データベース指向のSQL開発ではなく、ドメイン指向の開発に関しては、オブジェクト指向のファンは必然的にこれがさらにOOであると感じるでしょう。



Mybatisの利点
MyBatisは、より詳細なSQL最適化を実行して、クエリフィールドを減らすことができます。
MyBatisは習得が容易で、Hibernateには高いしきい値があります。
休止状態の利点
HibernateのDAOレイヤー開発は、SQLのメンテナンスと結果マッピングを必要とするMyBatisよりも簡単です。
HibernateはMyBatisよりも優れたオブジェクトの維持とキャッシュを行い、オブジェクトの維持と削除に便利です。
Hibernateデータベースの移植性は非常に優れていますが、MyBatisデータベースの移植性は良くありません。データベースが異なれば、異なるSQLを作成する必要があります。
Hibernateはより優れたL2キャッシュメカニズムを備えており、サードパーティのキャッシュを使用できます。 MyBatis自体が提供するキャッシュメカニズムは良くありません

  1. Hibernateは完全に自動化されており、mybatisは半自動化されています

Hibernateは、オブジェクトリレーショナルモデルを介してデータベースの操作を完全に実装でき、JavaBeanオブジェクトとデータベースの完全なマッピング構造を備えており、SQLを自動的に生成します。 Mybatisには基本的なフィールドマッピングしかなく、オブジェクトデータとオブジェクトの実際の関係は、手書きのSQLによって実装および管理する必要があります。

  1. Hibernateデータベースの移植性はmybatisよりもはるかに大きい

Hibernateは、強力なマッピング構造とhql言語により、オブジェクトとデータベース(oracle、mysqlなど)間の結合を大幅に削減します。mybatisには手書きのSQLが必要であるため、データベースとの結合は、プログラマーのsqlの記述方法に直接依存します。 sqlがユニバーサルではなく、特定のデータベース機能のsqlステートメントを多数使用する場合、移植性が大幅に低下し、コストが非常に高くなります。



  1. Hibernateには完全なログシステムがあり、mybatisにはいくつかのシステムがありません

Hibernateログシステムは非常に堅牢で、SQLレコード、関係の例外、最適化の警告、キャッシュヒント、ダーティデータの警告など、さまざまな問題をカバーします。mybatisには、基本的なログ機能以外にも多くの機能があります。

  1. Mybatisは、休止状態と比較して詳細に多くの注意を払う必要があります

Hibernateの構成はmybatisよりも複雑であり、学習コストはmybatisよりも高くなります。しかし、mybatisは使いやすいため、休止状態よりも多くの技術的な詳細につながります。 Mybatisは多くの詳細を考慮する必要がなく、開発モードは従来のjdbcとは大きく異なるため、プロジェクトの開始と開発は簡単ですが、詳細を無視するとプロジェクト前のバグが増えるため、開発は比較的安定したソフトウェアの開発は非常に遅く、ソフトウェアは開発されています。しかし、非常に迅速に。 Hibernateは正反対です。しかし、休止状態に非常に熟練している場合、開発効率は実際にはmybatisよりも悪くはありません。

  1. SQLの直接最適化、mybatisは休止状態よりもはるかに便利です

mybatis sqlはxmlで記述されているため、sqlの最適化は休止状態よりもはるかに便利です。そして、休止状態のSQLは自動的に生成され、hqlがあるにもかかわらず直接sqlを維持することはできませんが、機能はまだsqlほど強力ではありません。レポートやその他の異常なニーズを参照してください。hqlも停止します。つまり、hqlは休止状態に制限されます。ネイティブSQLをサポートし、開発モデルはormとは異なり、変換する必要があるため、使用するのはあまり便利ではありません。つまり、HibernateでSQLを作成する柔軟性は、mybatisほど良くありません。