MyBatis のクエリデータをプロパティで多対一処理する(1つのデータに対して複数のデータ)
2022-02-26 14:17:38
1対多の処理。 https://blog.csdn.net/weixin_44953227/article/details/112789495
公式のドキュメントです。 https://mybatis.org/mybatis-3/zh/sqlmap-xml.html#Result_Maps
データ作成
データテーブル
CREATE TABLE `teacher`(
id INT(10) NOT NULL,
`name` VARCHAR(30) DEFAULT NULL,
PRIMARY KEY (id)
) ENGINE=INNODB DEFAULT CHARSET=utf8;
INSERT INTO `teacher`(id,`name`) VALUES(1,'master');
CREATE TABLE `student`(
id INT(10) NOT NULL,
`name` VARCHAR(30) DEFAULT NULL,
`tid` INT(10) DEFAULT 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,'Xiao Ming',1);
INSERT INTO student(`id`,`name`,`tid`) VALUES(2,'Xiao Hong',1);
INSERT INTO student(`id`,`name`,`tid`) VALUES(3,'Xiao Zhang',1);
INSERT INTO student(`id`,`name`,`tid`) VALUES(4,'Xiao Li',1);
INSERT INTO student(`id`,`name`,`tid`) VALUES(5,'Xiao Wang',1);
先生クラス
public class Teacher {
private int id;
private String name;
}
学生クラス
public class Student {
private int id;
private String name;
private Teacher teacher;
private}
クエリインターフェース
public interface StudentMapper {
// Query nesting - subqueries
List
getStudentList();
// Result nesting
List
getStudentResult();
}
クエリのネスト処理(サブクエリ)
アイデア: 最初にすべての生徒についてクエリを実行し、次に生徒に基づいて教師フィールドを関連付けます。
tid
サブクエリを使用して、教師のデータを検索します。
-
association: 処理対象
- property: エンティティクラスのプロパティフィールド
- column: サブクエリに渡す必要のある、クエリ結果のフィールド
- javaType: 指定された属性のタイプ
- select: サブクエリ SQL
select * from student
select * from teacher where id = #{id}
結果のネスト処理
アイデア: まず、1つのクエリですべての情報を処理し、次にそのフィールドに対応するエンティティクラスを
association
コンフィギュレーション
-
association: 処理対象
- property: エンティティクラスのプロパティフィールド
- javaType:プロパティの種類を指定します。
SELECT s.id sid, s.name sname, t.name tname FROM student s, teacher t WHERE s.tid = t.id
概要
- アソシエーション - アソシエーションは多対一を処理する
- コレクション - コレクションは一対多を処理します。
-
javaType & ofType
- javaType: エンティティクラス内の属性のタイプを指定するために使用されます。
- ofType:コレクション内の型、汎用型内の制約型を指定します。
関連
-
Javaクラスが "Error occurred during initialization of boot layer "というエラーで実行される。
-
unsigned char* から const jbyte* {aka const signed char*} への変換が無効です。
-
java -jarコマンドでパッケージを実行すると、無効または破損したjarfile xxxx.jarが表示される。
-
Java Notes 005_この行に複数のマーカーがある - キーを変数に解決できない - シンタックスエラー、ins
-
Java Runtime Environmentを継続するためのメモリが不足しています。
-
テストが空であるかどうかを判断するためのオプションの処理
-
Javaでファイル名、ファイルプレフィックス、ファイルタイプ(ファイルサフィックス)を取得します。
-
コレクション - LinkedListソースコード解析
-
BigDecimalのサイズ比較メモ(イコール)
-
Javaプログラムでのデータ入力方法
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
ブートレイヤーの初期化中にエラーが発生しました java.lang.module.FindException: モジュールが見つかりません
-
StringBuilderが投げるArrayIndexOutOfBoundsExceptionの探索
-
強制型変換について
-
FindBugの使用概要
-
eclipse 実行 Java、エラー: 選択を起動できず、レシーバーもありません。
-
linux ant Resolve error: main class not found or couldn't be loaded org.apache.tools.ant.launcher.
-
静的でない内部クラスをインスタンス化するには、デフォルトの無引数コンストラクタを使用する必要があります。
-
ダウンロードのContentType設定
-
スプリング】豆の自動組立
-
JAVAで小さなゲームを書くことを教える