序文
Javaweb開発では、最も古典的な開発は、SSHフレームワークの組み合わせとSSMフレームワークの組み合わせです。現在、多くのIT企業はSSMを使用する意思があります。ここでHとMの場合、HibernateとMybatisについては、今日簡単にそれについて話させてください。
ドアでxを演奏します
授業中、私はしばしば学生にあなたがどんなテクニックでも理解しなければならないことを伝えます:
知識の説明
HibernateとMyBatisはどちらも非常に人気のあるORM(オブジェクト関係マッピング、それを率直に言えば、データベースにマッピングするテクノロジー)Persistenceレイヤーフレームワークです。本質的に、私たちの使用を促進し、開発を簡素化するために、まだカプセル化されたJDBCです。最初にいくつかの問題を把握しましょう:
永続層の導入がこの問題を解決できるのはなぜですか?分析:メカニズムは、翻訳として使用できる永続レイヤーに導入できます。下部のさまざまなデータベースの場合、HQLステートメントと動的クエリステートメントは、さまざまなSQLステートメントに変換されます。これにより、データベースを交換した後にSQLステートメントを変更する必要がないという問題が解決し、コードの量が大幅に削減されます。
それはとても良いので、HibernateとMybatisはどのようにして上記のソリューションを実装しましたか?つまり、彼らのORMはどのように実装されましたか?
冬眠
Hibernateでは、このメカニズムは構成ファイルhibernate.cfg.xml(SRCディレクトリに配置)です。
<hibernate-configuration> <session-factory> <プロパティ名= "connection.url"> jdbc:mysql:// localhost/hibernate </property> <プロパティ名= "connection.username"> root> <プロパティ名= "connection.password"> saber </property> <property name = "connection.driver_class"> com.mysql.jdbc.driver </property> <property name = "dialect"> org.hibernate.dialect.mysqldialect </property> <! - ddlステートメントは自動的にテーブルを作成します - > <プロパティ= "hbm2ddl.auto name = "format_sql"> true </property> <! - 接続プール構成 - > <プロパティ名= "hibernate.connection.provider_class"> org.hibernate.service.jdbc.connections.internal.c3p0connectionprovider </プロパティ> hibernateのデフォルトは1-> <プロパティ名= "hibernate.c3p0.min_size"> 5 </property> <! - 接続プールのJDBC接続の最大数。 hibernateは100 - > <プロパティ名= "hibernate.c3p0.max_size"> 20 </property> <! - 接続プールから秒単位でアイドル接続を削除する時期。デフォルトは0であり、有効期限はありません - > <プロパティ名= "hibernate.c3p0.timeout"> 300 </property> <! - キャッシュされた事前コンパイルされたステートメントの数。パフォーマンスを改善するために使用されます。 hibernateのデフォルトは0です。キャッシュは使用できません - > <プロパティ名= "hibernate.c3p0.max_statements"> 100 </property> <! - 接続が自動的に検証される前にアイドル時間(秒単位)。 hibernateのデフォルトは0-> <プロパティ名= "hibernate.c3p0.idle_test_period"> 3000 </property> <! - 独立して実行されます。 getCurrentsSession()を介してセッションを取得する場合、次のように設定する必要があります - > <プロパティ名= "current_session_context_class">スレッド</property> <! - 永続的なクラスをマッピングする2つの方法 - > <マッピングリソース= "com/serup/model/model/teacher.hbm.xml"/>
プロジェクトがデータベースを変更すると、変更する必要があるのはこのファイルのいくつかの属性にすぎず、ビジネスレイヤーのロジックコードを変更する必要はありません。
開発のために冬眠を使用することをお勧めします:
**ドメインオブジェクト--->マッピング--->データベースの言い換えれば、オブジェクトとテーブルにはマッピングが必要です。
1。XMLメソッド(クラスname.hbm.xml)
HBMファイルを介してテーブルとクラスの間のマッピング関係を確立する
2。注釈方法
その後、リバースエンジニアリングを使用すると、はるかに簡単になり、データベーステーブルを介して対応するファイルを直接生成できます。
mybatis
MyBatisでは、このメカニズムは構成ファイルMyBatis-Config.xml(SRCディレクトリに配置)にも依存しています。
<configuration> <properties resource = "sqlserverinfo.properties"/> <! - データベースの構成ファイル - > <typealiase> <パッケージname = "com.demo.domain"/> <! - ファイルを別々にスキャンするタイプエイリアスを使用してパッケージをスキャンします - > </</<環境= < type = "jdbc"/> <dataSource Type = "Pooled"> <プロパティ名= "driver" value = "$ {driver}"/> <property name = "url" value = "$ {url}"/> <プロパティ名= "username" value = "$ {username}"/> <property name = "$" $ "$" "$" $ "$"/</</</</datas> </環境> <マッパーズ> <! - 特定のCRUD操作を完了するためのファイルのマッピング - > <Mapperリソース= "com/demo/domain/usermapper.xml"/> </mappers> </configuration>このようにして、データベースを変更するたびに、構成ファイルを変更する必要があります。
MyBatisを開発するために使用すると、これをお勧めします。
**データベースを作成してさまざまなテーブルを作成します--->リバースエンジニアリングは、mybatis実行に必要なコードを自動的に生成します(mapper.java、mapper.xml、po ..)--->ビジネスロジックに従って制御レイヤーとサービスレイヤーを書き込みます。 **
違い
インターネットにはさまざまな比較がありますが、私はいくつかの異なるポイントについてしか話しません
1。Hibernateには、HQLと呼ばれるオブジェクト指向のクエリ言語があります。これは非常に強力です。 SQLステートメントがわからない類人猿は、データベースを追加、削除、変更、検索することができますが、これもその弱点です。 SQLステートメントを最適化できません。
2。MyBatisにはSQLステートメント構成が必要です。つまり、開始するにはデータベースの基本的な知識が必要です。さらに、初心者は結果マッピングで多くの落とし穴に遭遇したに違いありません。
3.特に大規模なプロジェクトを行ったことはありません。特別なパフォーマンス要件がない場合、Hibernateは機能を実装しやすくなります。
システムチューニング
Hibernateのチューニングソリューション
MyBatisチューニングソリューション
要約します
上記は、この記事のコンテンツ全体です。この記事の内容には、すべての人の研究や仕事に特定の参照値があることを願っています。ご質問がある場合は、メッセージを残してコミュニケーションをとることができます。 wulin.comへのご支援ありがとうございます。