MyBatisの紹介
MyBatisは、プレーンSQLクエリ、ストアドプロシージャ、高度なマッピングをサポートする優れた永続レイヤーフレームワークです。 MyBatisは、ほぼすべてのJDBCコードとパラメーターの手動設定と、結果セットの検索カプセル化を排除します。 MyBatisは、構成とオリジナルマッピング、マッピングインターフェイス、JavaのPOJO(プレーンオールドJavaオブジェクト)に、データベース内のレコードに簡単なXMLまたはアノテーションを使用できます。
MyBatisの機能アーキテクチャは3つのレイヤーに分かれています(写真はBaidu Encyclopediaから借用されています):
1)APIインターフェイスレイヤー:外部使用のインターフェイスAPIを提供し、開発者がデータベースを操作します。インターフェイスレイヤーがコールリクエストを受信すると、データ処理層を呼び出して特定のデータ処理を完了します。
2)データ処理層:特定のSQL検索、SQLの解析、SQL実行、および実行結果マッピング処理などを担当します。その主な目的は、コールの要求に基づいてデータベース操作を完了することです。
3)基本的なサポートレイヤー:接続管理、トランザクション管理、構成の読み込み、キャッシュ処理など、最も基本的な機能サポートを担当します。これらはすべて一般的なものであり、最も基本的なコンポーネントとしてそれらを抽出します。データ処理層の上層に最も基本的なサポートを提供します。
MyBatisでマッピングを選択すると、ResultTypeまたはresultMapで返品タイプを使用できます。 resultTypeは返品タイプを直接表しますが、resultmapは外部結果マップへの参照ですが、resultTypeとresultMapは同時に存在することはできません。 MyBatisがマッピングをクエリしている場合、実際、各属性クエリは対応するマップに配置されます。キーは属性名で、値は対応する値です。提供されたreturnタイプ属性がresultTypeである場合、MyBatisはマップ内のキー値のペアを取り出し、resultTypeで指定されたオブジェクトの対応する属性に割り当てます。したがって、実際には、MyBatisの各クエリマップの返品タイプは結果マップです。ただし、提供されるreturnタイプの属性がresultTypeである場合、mybatisはresultTypeで指定されたオブジェクトの属性に対応する値を自動的に割り当てます。 MAPがドメインモデルをうまく表現できないため、提供されるリターンタイプが結果マップである場合、複雑なクエリで非常に役立つことが多い対応するオブジェクトにさらに変換する必要があります。
そのようなblog.javaファイルがあります
Import java.util.list; public class blog {private int id; private string title; private string content; private list owner; private list <comment> comments; public int getid(){return id;} public void setid(this.id){this.id = id;} public string gettitle(){return ittitle;} public sittle(} public strint(string){string attitle( {return content;} public void setContent(string content){this.content = content;} public string getowner(){return owner;} public void setowner(string owner = owner = owner;} getcomments(){return comments;} public setcomments = public comments> toString(){return "---------------博客-------------------/n id:" + id + "/n title:" + title + "/n content:" + content + "/n所有者:" +所有者;}}}対応するデータベーステーブルには、ID、タイトル、コンテンツ、および所有者の属性が含まれています。次のクエリマッピングを実行するとき
<typealias alias = "blog" type = "com.tiantian.mybatis.model.blog"/> <! - mybatis mybatis_config.xmlからの構成ファイル - > <選択id = "selectblog" parametertype = "int" resulttype = "blog"> select * blogmapper.xml->
MyBatisは、結果マップオブジェクトを自動的に作成し、見つかった属性名に基づいてキー値ペアをカプセル化します。次に、リターンタイプがブログオブジェクトであることがわかり、結果マップからブログオブジェクトに対応するキー値ペアを取り出して割り当てます。
また、リターンタイプが直接結果マップである場合に非常に便利です。これは、主に複雑なジョイントクエリに使用されます。これは、簡単なクエリを実行する必要がないためです。まず、リターンタイプの結果マップを使用した簡単なクエリを見てから、複雑なクエリの使用を見てみましょう。
簡単なクエリの書き方
<resultmap type = "blog" id = "blogresult"> <id column = "id" property = "id"/> <result column = "title" property "/> <result column =" content "content" property = "content"/> <result column = "owner"/> <result column = "ander" and "property =" and " Property = "所有者"/> <</resultmap> <select id = "selectblog" parametertype = "int" resultmap = "blogresult"> select * from id =#{id} </select>選択マップの結果マップの値は、外部結果マップのIDであり、どの結果がマッピングされるかを示します。外部結果マップの型属性は、結果マップの結果の型を示します。これがブログの種類ですので、MyBatisはブログオブジェクトとしてそれを取り出します。結果マップノードの子ノードIDは、オブジェクトのIDを識別するために使用され、結果の子ノードはいくつかの単純なプロパティを識別するために使用されます。列プロパティは、データベースから照会された属性を表し、プロパティは、クエリプロパティの対応する値がエンティティオブジェクトに割り当てられているプロパティを表します。これは、Simpleクエリ用のResultMapを作成する方法です。次に、より複雑なクエリを見てみましょう。
ブログの参照があるコメントクラスがあり、どのブログのためのブログを示しています。コメントを照会するときは、対応するブログを見つけて、ブログ属性に割り当てる必要があります。
java.util.date; public class comment {private int id; private string content; private date commentdate = new blog; public int getid(){return id;} public void setid(this.id){this.id = id;} {return commentDate;}public void setCommentDate(Date commentDate) {this.commentDate = commentDate;}public Blog getBlog() {return blog;}public void setBlog(Blog blog) {this.blog = blog;}public String toString() {return blog + "/n ----------------评论-----------------/n id: " + id + "/n content: " + content + "/n commentdate:" + commentdate;}}このように書かれています
<! - commentmapper.xml file - > <resultmap = "comment" id "=" commentResult "> <associationプロパティ=" select = "selectblog" colummen = "blog" javatype = "blog"/> </resultmap> <selectid id = "selectcomment" parametertype = "int" restermment " id = "SelectBlog" parameterType = "int" resultType = "blog"> select * from t_comment from id =#{id} </select> <select id = "selectblog" parametertype = "int" resulttype = "blog"アクセスの状況はこのようなものです。最初に、SelectCommentのIDを使用した選択マップを要求し、次にCommentResultのIDを使用して結果マップオブジェクトを取得します。対応する結果マップの戻りタイプは、1つの関連ノードのみを備えたコメントオブジェクトであり、上記の単純なクエリに対応するIDおよび結果の子ノードはありませんが、コメントオブジェクトに対応するIDおよびその他の属性を割り当てます。これがMyBが前述したことです。 ATISには自動カプセル化機能があります。リターンタイプを提供する限り、MyBatisはクエリ結果を使用して、それ自体の判断に従って対応するオブジェクトをカプセル化します。したがって、上記の簡単なクエリでは、どのフィールドがIDに対応し、どのフィールドが結果マップのタイトルに対応するかを明確に示していない場合、MyBatisも独自の判断に従ってそれをカプセル化します。 MyBatis自身の判断は、クエリのフィールドまたは対応するエイリアスを返されるオブジェクトの属性と比較することです。一致し、タイプも一致する場合、MyBatisはそれを割り当てます。ブログ属性は、上記の対応する結果マップに関連付けられており、対応するJavaタイプはブログです。上記の記述方法では、関連するオブジェクトはサブQueriesを通じて関連付けられており、もちろん、Associationクエリを通じて直接関連することもできます。上記のAssociation Child Nodeでは、プロパティ属性は、どの関連プロパティが結果マップリターンタイプであるかを示します。上記の例では、コメントで管理されているブログ属性。選択するマップを選択するかを選択します。これは、対応する関連属性をマップする、つまり、属性オブジェクトに関連する属性オブジェクトを照会するために対応する値を持つ選択マップを要求します。列は、ID CommentResultを使用した結果マップに対応するキー価値ペアを示します。このキー値ペアは、関連するオブジェクトのサブクエリのパラメーターとして使用されます。つまり、SelectCommentのブログ属性クエリの値は、関連するオブジェクトブログのサブクエリにパラメーターとして渡されます。 Javatypeは、現在の関連するオブジェクトのタイプがJavaにあるかを示します。
上記は、1対多数の場合、1対1または1対10の関係のクエリを紹介します。実際のアプリケーションでは、より頻繁に使用する別のアプリケーションがあります。一方の当事者を通じて、対応するより多くの関係者を見つける必要があります。より多くのパーティーを連れ出す場合、1つの当事者も1つの当事者に関連付けられなければなりません。つまり、上記の例では、ブログオブジェクトを取り出すと、対応するすべてのコメントが取り出されます。コメントを取り出すとき、それはまだ対応するブログを取り出す必要があります。これは、Javaでのリクエストを通じて削除されます。ライティング方法は次のとおりです。
<! - blogmapper.xml Fileから - > <resultmap type = "blog" id = "blogresult"> <id column = "id" property = "id"/> <collection property = "comments" selectcommentsbyblog "column =" id "oftype =" comment "> </collection> </resportmap> <resultmap =" comment = "" comment javatype = "blog" column = "blog" select = "selectblog"/> </resultmap> <select id = "selectblog" parametertype = "int" resultmap = "blogresult"> select * from where where where where where where where where where where where where where where where where where resultmap = "commentresult"> select * from t_comment where blog =#{blogid} </select>上記のリクエストのエントリは、ID selectblogを使用した選択マップであり、返される結果はID Blogresultの結果マップです。 ID Blogresultのタイプはブログで、IDの属性とフィールドを指定します。 IDを指定すると、MyBatisの内部構造に大きな影響があります。コメントオブジェクトに関連付けられています。ブログにはコレクションである多くのコメントがあるため、コレクションコレクションがマッピングされているためです。 Selectは、対応するコメントを照会するために実行されるサブクエリをまだ示しています。列とは、上記のフィールド値がパラメーターとしてサブクエリに渡されることを意味します。 OFTypeは、リターンタイプも表します。ここの返品タイプは、コレクション内のタイプです。 OFTypeがタイプの代わりに使用される理由は、MyBatis内でそれを協会協会と区別するために使用されるためです。
テストコード:
@testpublic selectcommentsbyblogtest(){sqlsession session = util.getsqlsessionfactory()。opensession(); commentMapper commentMapper = session.getMapper(commentMapper.class); list <comment> comment> comment>コメント= commentmapper.selectcommentsbyblog(6);コメント)System.out.println(comment); session.close();}/***単一のレコード*/@@testpublic void testselectone(){sqlsession session = util.getSqlSessionFactory()。 blogmapper.selectblog(6); list <コメント>コメント= blog.getcomments(); if(comments!= null){system.out.println( "-------------コメントサイズ-------------" + comments.size());上記は、編集者が紹介したMyBatisの結果マップの簡単な概要です。それがあなたに役立つことを願っています。ご質問がある場合は、メッセージを残してください。編集者は時間内に返信します。 wulin.comのウェブサイトへのご支援ありがとうございます!