1. 程式人生 > 其它 >mybatis學習15:複雜查詢環境搭建

mybatis學習15:複雜查詢環境搭建

mybatis學習15:複雜查詢環境搭建

  • 多對一處理:

    • 流程圖:

       

    • 多個學生對應一個老師;

    • 對於學生而言,就是多對一,所以學生和老師的關係是:關聯關係(多個學生關聯一個老師)

    • 對於老師而言,就是一對多,所以老師和學生的關係是:集合關係(一個老師下面有很多學生)

 

  • 關聯:association

    • association :一個複雜型別的關聯;

    • 許多結果將包裝成這種型別;

 

  • 集合:collection

    • collection – 一個複雜型別的集合;

 

  • SQL:通過物理外來鍵實現多對一

    • 表結構關係圖:

       

    • 指令碼:

      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, '秦老師');



      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', '小明', '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');

 

 

  • 測試環境搭建:

    • 匯入lombok

    • 新建實體類Teacher,Student

    • 建立Mapper介面

    • 建立Mapper.xml

    • 把Mapper.xml註冊到Mybatis核心配置檔案中;

    • 測試是否成功!

 



 

  • 多對一的處理:

    • 按照查詢巢狀處理:類似於子查詢

      <!--
       思路:
       1,查詢所有的學生資訊;
       2,根據查詢出來的學生tid尋找對應的老師;
      -->
      <resultMap id="studentTeacher" type="student">
         <result property="id" column="id"/>
         <result property="name" column="name"/>
         <!--複雜的屬性,我們需要單獨處理
             物件:association
             集合:collection
         -->
         <association property="teacher" column="tid" javaType="teacher"       select="getTeacher"/>
      </resultMap>

      <select id="getStudent" resultMap="studentTeacher">
        select * from student
      </select>

      <select id="getTeacher" resultType="teacher">
        select * from teacher where id=#{tid}
      </select>
    • 按照結果巢狀處理:多表聯查

      <!--按照結果巢狀處理-->
      <resultMap id="studentTeacher2" type="student">
         <result property="id" column="sid"/>
         <result property="name" column="sname"/>
         <association property="teacher" javaType="teacher">
             <result property="name" column="tname"/>
         </association>
      </resultMap>

      <select id="getStudent2" resultMap="studentTeacher2">
        select a.id as sid ,a.name as sname,b.name as tname from student a , teacher b where a.tid=b.id
      </select>