1. ホーム
  2. Java

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
    










概要

  1. アソシエーション - アソシエーションは多対一を処理する
  2. コレクション - コレクションは一対多を処理します。
  3. javaType & ofType
    1. javaType: エンティティクラス内の属性のタイプを指定するために使用されます。
    2. ofType:コレクション内の型、汎用型内の制約型を指定します。