MyBatisの学習 - 1件の関連のお問い合わせ

まず、データベースを説明するのに最初、データベーステーブルには、二つのテーブルの学生と教師のテーブルがあります。

次のように学生のテーブルには、次のとおりです。

次のように教師のテーブルには、次のとおりです。

 

2つのテーブル間の関係:複数の生徒に関連付けられている教師(多くの)

*外部キーのTIDです

SQL文は、友人がここに得ることができます必要があります。

CREATE  TABLEを`teacher`(
    ` id` INT10NOT  NULL 
    `NAME` VARCHAR30DEFAULTの NULL PRIMARY  KEY (` id`)
)ENGINE = INNODB DEFAULT CHARSET = UTF8 

INSERT  INTOの教師( `id`、` NAME`)VALUES1' 秦老师' )。

CREATE  TABLEを`student`(
    ` id` INT10NOT  NULL 
    `NAME` VARCHAR30DEFAULTの NULL 
    ` tid` INT10DEFAULTの NULL PRIMARY  KEY ( `id`)、
     KEY ` fktid`( `tid`)、
     CONSTRAINT ` fktid` FOREIGN  KEY( `TID `)REFERENCES ` teacher`( `id`)
)ENGINE = INNODB DEFAULT CHARSET = UTF8 

INSERT  INTO ` student`( `id`、` NAME`、 `tid`)VALUES'1 ' ' 小明' ' 1 ' )。
INSERT  INTO `student`(` id`、 `NAME`、` tid`)VALUES' 2 '' 小红'' 1 ' )。
INSERT  INTO `student`(` id`、 `NAME`、` tid`)VALUES' 3 '' 小张'' 1 ' )。
INSERT  INTO `student`(` id`、 `name`の、` tid`)VALUES"4 ' ' 小李' ' 1 ' )。
INSERT  INTO `student`(` id`、 `NAME`、` tid`)VALUES' 5 '' 小王'' 1 ' )。

SELECT  *  FROM 学生;
SELECT  *  FROM教師。
コードの表示

 

次のトピックを入力します。

1.準備クラスPOJO

@data
 パブリック クラスの学生{
     プライベート int型述べたID上記;
     プライベート文字列名; 

    // 学生が教師関連付ける必要があります
    プライベートティーチャー教師を; 
}
@data
 公共の クラスの先生{
     プライベート int型のID。
    プライベート文字列名; 
}

注:@Dataは自動注釈は、get()、セット()、のtoString()メソッドを導入する私たちを助けることができる使用し、コメントです。ロンボク島からのこのコメントは、このアノテーションを使用するには、最初のプラグインロンボクと輸入関連のjarパッケージをインストールする必要があります。

 

2.書き込みインターフェイスクラス

パブリックインターフェースStudentMapper {
     パブリックリスト<学生> getStudent(); 
}

マッピングファイルを書く3

ネストされたとネスティング処理プロセスに従ってクエリ結果に応じて二つの方法がありますが、

 

一つの方法:ネストされたクエリの処理に従って

アイデア:私たちは、最初の教師の生徒のTIDのうち、クエリに対応するクエリ情報、以下のコードに、すべての学生をチェックして、

<?xml version = "1.0"は"GBK"をコードします=?> 
<!DOCTYPEマッパー
        PUBLIC " - // mybatis.orggetStudent // DTDコンフィグ3.0 // EN" 
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> 
<マッパー名前空間= "com.kuang.dao。 StudentMapper "> 

    <。SELECT ID =" getStudent」このresultMap = "StudentTeacher"> 
        SELECT * 学生FROM
     </>を選択し
    、<このresultMap ID = "StudentTeacher"タイプ= "学生"> 
        <resultプロパティ= "ID"列= "ID"を/ > 
        <結果プロパティ= "名前"欄= "名前" /> 
        <関連プロパティ=」
  <SELECT ID = "getTeacher" resultTypeと= "教師"> 
        教師どこからID = SELECT * #{TID} 
    </選択>
</マッパー>

 

注意:

  ●以来、<団体>そうであること、彼にセットタイプを与え、オブジェクトのプロパティの値である、のJavaTypeのpeoperty設定タイプに、カスタム教師の先生のPOJOクラスのタイプ、のJavaType =「先生」

    

  ●上部のコード<このresultMap>タグは、私たちがマップする簡単な<結果>タグを使用することができます属性が、それはそれの複雑な性質を解決する方法の方法の結果をマップする複雑な属性を取りませんか?2つのケースがあります。

    。①オブジェクトの複雑な性質は次のとおりです。関連で

    ②。複雑なコレクションで、プロパティのコレクションです

 

マッピングプロセス図:

 

第二の方法:ネストされたプロセスの結果に応じて

この方法では、限り、あなたは詳細には触れていないここで、理解することができます途中での比較として、比較的簡単です。

マップファイルのコードは次のとおりです。

<! -方式二- > 
<選択のid = "getStudent2"このresultMap = "StudentTeacher2">
SELECTはSNAME、TID AS t.id、TNAME AS t.name AS s.name、ASは、SID s.id
学生Sから、教師トン
s.tid = t.id
</ select>の

<このresultMap ID = "StudentTeacher2"タイプ= "学生">
<resultプロパティは、= "ID"列= "SID" />
<プロパティの結果= "名前"欄= "SNAME" />
<関連プロパティ= "教師"のJavaType = "教師">
<resultプロパティ= "ID"列= "TID" />
<結果プロパティ= "名前"欄= "TNAME" />
</協会>
</このresultMap>

 

注意:

識別名を省略することができない分野へ●select文は、それ以外の結果が間違っていることでしょう。私にはわからない間違った理由は、以下のコメントで友人の歓迎を知って、感謝されます!

 

おすすめ

転載: www.cnblogs.com/bear7/p/12511088.html