この記事では、MyBatisのフレームワーク原則とMyBatisの入門プログラムを紹介して、ユーザーの追加、削除、修正、検査を実現します。その利点と欠点は何ですか、そしてMybatisとHibernateの間にどのような関係が存在しますか。友達に役立つことを願っています。欠点がある場合は、アドバイスをください。
MyBatisとは何ですか?
MyBatisはApacheのオープンソースプロジェクトです。 2010年、このプロジェクトはApache Software FoundationからGoogleコードに移動し、MyBatisと改名されました。 2013年11月にGithubに移住しました。
MyBatisは、カスタマイズされたSQL、ストアドプロシージャ、および高度なマッピングをサポートする優れた永続レイヤーフレームワークです。 MyBatisは、ほぼすべてのJDBCコードと手動設定パラメーターと結果セットを削除することを回避します。 MyBatisは、単純なXMLまたはアノテーションを使用して、プリミティブを構成およびマッピングし、インターフェイスとJava Pojos(プレーンオールドJavaオブジェクト)をデータベースのレコードにマッピングします。簡単に言えば、MyBatisは永続的なレイヤーフレームワークです。 MyBatisでは、プログラムがSQLに焦点を合わせ、MyBatisが提供するマッピング方法を通じてニーズを満たすSQLステートメントを自由に柔軟に生成することができます。 MyBatisは、入力パラメーターを準備するための入力パラメーターを自動的に入力し、クエリ結果をJavaオブジェクトに柔軟にマッピングできます。
次に、写真を通してMyBatisのフレームワークの原則を理解しましょう。
フレームワークアーキテクチャの説明:
a。構成ファイルの読み込み:構成は2つの場所からあります。1つは構成ファイル、もう1つはJavaコードの注釈です。 SQLの構成情報は、マッピングステートメントオブジェクト(渡されたパラメーターマッピング構成、実行されたSQLステートメント、および結果マッピング構成を含む)にロードされ、メモリに保存されます。
b。 SQL Parsing:APIインターフェイスレイヤーがコールリクエストを受信すると、着信SLQと着信オブジェクトのIDが受信されます(マップまたは基本データ型にすることができます)。 MyBatisは、SQLのIDに基づいて対応するマッピングステートメントを見つけ、その後、着信パラメーターオブジェクトに基づいてマッピングステートメントを解析します。解析後、最終的にSQLステートメントとパラメーターを実行することができます。
c。 SQL実行:実行のために最終的なSQLとパラメーターをデータベースに取り、データベースの操作結果を取得します。
d。結果マッピング:ハッシュマップ、javabean、または基本データ型に変換できるマッピング構成に従って、操作データベースの結果を変換し、最終結果を返すことができます。
MyBatisはプログラム分析を開始します
次に、編集者はデモと組み合わせて特定の要件を導入し、要件は次のとおりです。
ユーザーIDに基づくユーザー情報をクエリします。
ユーザー名に基づいてユーザー情報がファジーにクエリします。
ユーザーを追加、削除、更新します。
最初のステップは、さまざまなパッケージとクラスを作成することです。プロジェクトディレクトリは次のとおりです。
2番目のステップは、sqlmapconfig.xmlでコンテンツを書き込み、MyBatisの実行環境、データソース、トランザクションなどを構成することです。コードは次のようになります:
<span style = "font-family:comic sans ms; font-size:18px;"> <?xml version = "1.0" encoding = "utf-8"?> <!doctype構成 " - // mybatis.org//dtd config 3.0 // en" <configuration> <! - 環境構成は春が統合された後に廃止されます - > <環境デフォルト= "developent"> <! - JDBCトランザクション管理を使用します。トランザクションコントロールはmybatisによる - > <トランザクションマネージャータイプ= "JDBC"/> <! - マイバティスによって管理されたデータベースタイプ= value = "$ {jdbc.driver}"/> <property name = "url" value = "$ {jdbc.url}"/> <プロパティ名= "username" value = "$ {jdbc.username}"/>> <プロパティ名= "パスワード" value = "$ {jdbc.password} - > <mappers> resource = "sqlmap/user.xml"/> </mappers> </configuration> </span>3番目のステップは、以下に示すように、user.javaにコンテンツを書くことです。
<span style = "font-family:comic sans ms; font-size:18px;"> package cn.itcast.mybatis.po; Import Java.util.date; /** * * <p>タイトル:ユーザー</p> * <p>説明:ユーザーpo </p> * @author ding guohua * @date 2016年7月31日15:39:04 * @version 1.0 */public classユーザー{//属性名はデータベーステーブルのフィールドに対応しています。プライベート文字列ユーザー名; //ユーザー名プライベートストリングセックス; //ジェンダープライベートデート誕生日; //誕生日プライベートストリングアドレス; //アドレスpublic int getid(){return id; } public void setid(int id){this.id = id; } public string getUsername(){return username; } public void setUsername(string username){this.username = username; } public string getSex(){return sex; } public void setSex(string sex){this.sex = sex; } public date getBirthday(){return Birthday; } public void setbirthday(date Birthday){this.birthday = Birthday; } public string getAddress(){return Address; } public void setAddress(stringアドレス){this.address = address; } @Override public String toString(){return "user [id =" + id + "、username =" + username + "、sex =" + sex + "、誕生日=" +誕生日 + "、address =" + address + "]"; }} </span>ステップ4:追加、削除、変更、検索の機能を実装するには、最初にuser.xmlにコンテンツを書き込みます。
<span style = "font-family:comic sans ms; font-size:18px;"> <?xml version = "1.0" encoding = "utf-8"?> < <! - 名前空間名空間は、SQL管理を分類し、SQLの分離を理解する機能です注:マッパープロキシメソッドを使用して、名前空間は特別で重要な役割を再生します - > <Mapper namespace = "test"> <! - マッピングファイルの多くのSQLステートメントを構成 - > <> <!マッピングファイルのSQLは、SQLステートメントをマッピングステートメントオブジェクトにカプセル化するため、IDはIDパラメータ型と呼ばれます。入力パラメーターのタイプを指定します。ここで、INTタイプ#{}を指定して、IDが入力を受信したパラメーターを表し、パラメーター名を表します。入力パラメーターが単純なタイプの場合、#{}のパラメーター名は任意であり、値または他の名前である可能性がありますresultType:SQLの出力結果のマッピングされたJavaオブジェクトのタイプを指定し、resultTypeを1つのレコードにマッピングしたJavaオブジェクトを表すresultTypeを指定します。 - > <id = "finduserbyid" parametertype = "int" resulttype = "cn.itcast.mybatis.po.user"> select * select * user from user where id =#{value} </select> <! - ファジークエリユーザー情報SQL文字列をスプライシングし、受信したパラメーターのコンテンツを変更せずにSQLにスプライシングします。 $ {}を使用してSQLをスプライスし、SQLに$ {value}を注入します:入力パラメーターのコンテンツを受信します。受信タイプが単純なタイプの場合、$ {} - > <選択id = "finduserbyname" parametertype = "java.lang.string" resulttype = "cn.itcast.mybatis.po.user"> select * from username where username like '%$ {valual} {valut "<タイプはpojo(ユーザー情報を含む)#{}のpojoの属性名を指定し、pojoオブジェクトの属性値を受信し、mybatisはognl-> <insertuser "parametertype =" cn.itcast.mybatis.po.user "> < last_insert_id():挿入された録音されたプライマリキー値を取得します。これは、自己増加のプライマリキープロパティにのみ適用されます。クエリのプライマリキー値をパラメータ型によって指定されたオブジェクトのプロパティにクエリのプライマリキー値を設定します。 keyproperty = "id" order = "aby" resulttype = "java.lang.integer"> select last_inser_id()</selectkey> inserting into into user(username、bashidd、sex、address)value(#{username}、#{誕生日}、#{誕生日}、#{sex}、#{address})<!最初に、UUIDを介してプライマリキーを取得し、ユーザーオブジェクトのID属性のプライマリキーを設定し、次に挿入を実行すると、ユーザーオブジェクトからID属性値を削除します - > <selectkey keyproperty = "id" order = "before" resulttype = "java.lang.string"> selectkey uuid()</selectykey> insert intering(us( value(#{username}、#{bashind}、#{sex}、#{address}); </INSERT> <! - ユーザーを削除してIDに基づいてユーザーを削除するには、ID値を入力する必要があります - > <delete id = "deleteuser" parametertype = "java.lang.integer">ユーザーから削除するid =#{id} </delete> <! IDや更新情報を含むユーザーオブジェクトを指定します。注:IDは存在する必要があります</mapper> </span>ステップ5:特定の方法を次のように記述します。
<span style = "font-family:comic sans ms; font-size:18px;"> package cn.itcast.mybatis.first; java.io.ioexceptionをインポートします。 java.io.inputStreamをインポートします。 Import Java.util.date; java.util.listをインポートします。 Import org.apache.ibatis.io.resources; Import org.apache.ibatis.session.sqlsessionfactory; Import org.apache.ibatis.session.sqlsessionfactoryBuilder; Import org.junit.test; cn.itcast.mybatis.po.userをインポートします。パブリッククラスmybatisfirst {// idに基づいてユーザー情報をクエリし、レコード結果を取得@test public void finduserbyidtest()throws ioexception {// mybatis構成ファイル文字列= "sqlmapconfig.xml"; //構成ファイルを取得しますinputstream inputstream = resources.getResourceasStream(resource); //セッションファクトリを作成し、mybatis構成でパスファイル情報sqlsessionfactory sqlsessionfactory = new sqlsessionfactorybuilder().build(inputstream); //工場sqlsession sqlsession = sqlsessionfactory.opensession()を介してsqlsessionを取得します。 // sqlsessionを介してデータベースを操作する//最初のパラメーター:マップファイルのステートメントのIDは= namespace+ "。"+ステートメントのID // 2番目のパラメーター:マップファイルで一致するパラメータータイプのパラメーターを指定しますsqlsession.selectone( "test.finduserbyid"、1); System.out.println(user); //リソースをリリースsqlsession.close(); } // fuzzy queryユーザー名に基づいてユーザーリスト@test public void finduserbynametest()throws ioexception {// mybatis configuration file string resource = "sqlmapconfig.xml"; // configuration file inputstream inputstream = resources.getResourceasStream(resource)を取得します。 //セッションファクトリを作成し、mybatis構成ファイル情報で渡されますsqlsessionfactory sqlsessionfactory = new sqlsessionfactorybuilder()。 //工場sqlsession sqlsession = sqlsessionfactory.opensession()を介してsqlsessionを取得します。 //リストのユーザーのユーザーは、マッピングファイルリスト<user> list = sqlsession.selectlist( "test.finduserbyname"、 "xiao ming")でドイツ語のresultTypeで指定されたタイプと同じです。 System.out.println(list); sqlsession.close(); } public void insertusertest()throws ioException {// mybatis構成ファイル文字列resource = "sqlmapconfig"; //構成ファイルを取得しますinputstream inputstream = resources.getResourceasStream(resource); //セッションファクトリを作成し、mybatis構成ファイル情報で渡されますsqlsessionfactory sqlsessionfactory = new sqlsessionfactorybuilder()。 //工場sqlsession sqlsession = sqlsessionfactory.opensession()を介してsqlsessionを取得します。 //ユーザーオブジェクトを挿入しますユーザー= new user(); user.setUsername( "ding guohua"); user.setbirthday(new date()); user.setsex( "1"); user.setAddress( "anhui hefei"); //リスト内のユーザーとマッピングファイルのresultTypeで指定されたタイプは、常にsqlsession.insert( "test.insertuser"、user)です。 // sqlsession.commit(); //セッションを閉じますsqlsession.close(); } // id @testに基づいてユーザー情報を削除しますpublic void deleteusertest()throws ioexception {// mybatis構成ファイル文字列resource = "sqlmapconfig.xml"; //構成ファイルを取得しますinputstream inputstream = resources.getResourceasStream(resource); //ファクトリを作成し、MyBatis構成ファイル情報sqlSessionFactory sqlSessionFactory = new SQLSessionFactoryBuilder()。 //工場sqlsession sqlsession = sqlsessionfactory.opensession()を介してsqlsessionを取得します。 //受信IDを削除するユーザーsqlsession.delete( "test.deleteuser"、39); // sqlsession.commit(); //セッションを閉じますsqlsession.close(); } //ユーザー情報を更新@test public void updutsusertest()throws ioexception {// mybatis configuration file string resource = "sqlmapconfig.xml"; //構成ファイルを取得しますinputstream inputstream = resources.getResourceasStream(resource); //セッションファクトリを作成し、mybatis構成でパスファイル情報sqlsessionfactory sqlsessionfactory = new sqlsessionfactorybuilder().build(inputstream); //工場sqlsession sqlsession = sqlsessionfactory.opensession()を介してsqlsessionを取得します。 //ユーザーユーザー= new user(); // ID user.setId(41)を更新します。 user.setUsername( "ding guohua"); user.setbirthday(new date()); user.setsex( "2"); user.setAddress( "anhui hefei"); sqlsession.update( "test.updateuser"、user); //トランザクションsqlsession.commit()をコミットします。 //セッションsqlsession.close()を閉じる; }} </span>mybatisの長所と短所
アドバンテージ:
a。簡単に始めてマスター。
b。 SQLはXMLで記述されており、統一された管理と最適化を促進します。
c。 SQLとプログラムコードをデコープルします。
d。オブジェクトとデータベース間のORMフィールド関係マッピングをサポートするマッピングタグを提供する
e。オブジェクト関係のマッピングタグを提供して、オブジェクト関係の構築とメンテナンスをサポートする
f。 XMLタグを提供し、ダイナミックSQLの作成をサポートします。
欠点:
a。特に多くのフィールドと関連するテーブルがある場合、SQLワークロードは非常に高いです。
b。 SQLはデータベースに依存しているため、データベースの移植性が低下します。
c。 XMLのタグIDは一意である必要があるため、DAOのメソッドはメソッドの過負荷をサポートしません。
d。 DAOレイヤーは単純すぎて、オブジェクトアセンブリのワークロードは比較的大きいです。
e。キャッシュの不適切な使用は、汚れたデータを簡単に生成できます。
MyBatisとHibernateの比較
類似点:HibernateとMyBatisは、sessionFactoryBuilderを介してXML構成ファイルからSessionFactoryを生成し、SessionFactroyからセッションを生成できます。最後に、セッションは物事とSQLステートメントの実行を開始します。 SessionFactoryBuilder、SessionFactory、およびセッションのライフサイクルはほぼ同じです。
違い:
MyBatis:小さく、便利で、効率的で、シンプル、直接、半自動。
Hibernate:強力で、便利で、効率的で、複雑な、曲がり、完全に自動。
MyBatis:
a。できるだけ早く開始し、学習し、使用するのは簡単です。データベースクエリに自動オブジェクトバインディング関数を提供し、多くのSQL使用体験を継続しています。オブジェクトモデルの要件がこのような高いプロジェクトに最適です。
b。より詳細なSQL最適化を実行でき、クエリフィールドを削減できます。
c。欠点は、フレームワークがまだ比較的単純であり、機能がまだ欠落していることです。データバインディングコードは簡素化されていますが、基礎となるデータベースクエリ全体を実際に自然に記述する必要がありますが、ワークロードは比較的大きく、迅速なデータベースの変更に適応するのは簡単ではありません。
d。二次キャッシングメカニズムは貧弱です。
Hibernate:
a。強力な機能、優れたデータベースの無関係性、および強力なO/Rマッピング機能。冬眠に非常に熟練しており、冬眠を適切にカプセル化する場合、プロジェクトの永続レイヤーコード全体が非常に簡単で、記述する必要があるコードは非常に高く、開発速度は非常に高速で、非常にクールです。
b。より良い二次キャッシュメカニズムがあり、サードパーティのキャッシュを使用できます。
c。欠点は、学習しきい値が低くなく、熟練している必要があることです。 O/Rマッピングの設計方法、パフォーマンスモデルとオブジェクトモデルのバランスを取る方法、および冬眠の使用方法には、経験と強力な能力が必要です。
鮮明な比phorをお知らせください:
MyBatis:機械工具は使いやすく、できるだけ早く使用できますが、自分で作業を行う必要がありますが、ツールは生きているので、それらを作る方法は私に依存します。
Hibernate:インテリジェントロボットですが、開発(学習、習熟度)を開発するのは非常に高価です。仕事はそれを取り除くことができますが、それができることだけです。
編集者のメッセージ:このブログ投稿では、編集者は主にMyBatisの基本的な知識を簡単に紹介しました。これには、追加、削除、変更、検索の簡単なデモ、Mybatisの利点と短所、HibernateとMybatisの比較が含まれます。それらの類似点と相違点。 MyBatisは、単に永続的なレイヤーフレームワークです。 MyBatisでは、プログラムがSQLに焦点を合わせ、MyBatisが提供するマッピング方法を通じてニーズを満たすSQLステートメントを自由かつ柔軟に生成することができます。 MyBatisは、入力パラメーターを準備に自動的に入力し、クエリ結果をJavaオブジェクトに柔軟にマッピングできます。
上記は、編集者によって紹介されたMyBatisの原則の概要の入門チュートリアルです。私はそれが誰にでも役立つことを願っています。ご質問がある場合は、メッセージを残してください。編集者は、すべての人に時間内に返信します。 wulin.comのウェブサイトへのご支援ありがとうございます!