mybatis學習15:複雜查詢環境搭建
阿新 • • 發佈:2022-04-08
-
多對一處理:
-
流程圖:
-
多個學生對應一個老師;
-
對於學生而言,就是多對一,所以學生和老師的關係是:關聯關係(多個學生關聯一個老師)
-
對於老師而言,就是一對多,所以老師和學生的關係是:集合關係(一個老師下面有很多學生)
-
-
關聯:
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>
-