mybitis第三讲:关联查询
創建三個表
CREATE TABLE `t_teacher` (
`t_id` int(11) NOT NULL AUTO_INCREMENT,
`t_name` varchar(20) DEFAULT NULL,
PRIMARY KEY (`t_id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8;
INSERT INTO `t_teacher` VALUES ('1', '劉曉云');
INSERT INTO `t_teacher` VALUES ('2', '鄭同華');
INSERT INTO `t_teacher` VALUES ('3', '李明軍');
CREATE TABLE `t_class` (
? `c_id` int(11) NOT NULL AUTO_INCREMENT,
? `c_name` varchar(20) DEFAULT NULL,
? `teacher_id` int(11) DEFAULT NULL,
PRIMARY KEY (`c_id`),
KEY `fk_teacher_id` (`teacher_id`),
CONSTRAINT `fk_teacher_id` FOREIGN KEY (`teacher_id`) REFERENCES `t_teacher` (`t_id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8;
INSERT INTO `t_class` VALUES ('1', '2020軟件1班', '3');
INSERT INTO `t_class` VALUES ('2', '2020軟件2班', '2');
INSERT INTO `t_class` VALUES ('3', '2020軟件3班', '1');
CREATE TABLE `t_student` (
? `s_id` int(11) NOT NULL AUTO_INCREMENT,
? `s_name` varchar(30) DEFAULT NULL,
? `s_gender` varchar(10) DEFAULT NULL,
? `s_age` int(11) DEFAULT NULL,
? `class_id` int(11) DEFAULT NULL,
? PRIMARY KEY (`s_id`)
) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=utf8;
insert into `t_student` VALUES ('1','童大為','男','20','1');
insert into `t_student` VALUES ('2','童為','男','22','1');
insert into `t_student` VALUES ('3','童小為為','男','20','1');
insert into `t_student` VALUES ('4','李總','男','28','1');
insert into `t_student` VALUES ('5','李四','男','24','1');
insert into `t_student` VALUES ('6','張三','男','20','1');
insert into `t_student` VALUES ('7','王五','男','21','1');
insert into `t_student` VALUES ('8','張起靈','男','20','1');
insert into `t_student` VALUES ('9','張日山','男','200','1');
創建更剛才創建好的表相對應的實體類文件,在里面創建get\set\tostring,方法
附上代碼:
package net.lbd.mybatis.bean;public class Teacher {private int id;private String name;public int getId() {return id;}public void setId(int id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}@Overridepublic String toString() {return "Teacher{" +"id=" + id +", name='" + name + '\'' +'}';} }?
package net.lbd.mybatis.bean;public class Student {private int id;private String name;private String gender;private int age;private int clazz;public int getId() {return id;}public void setId(int id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getGender() {return gender;}public void setGender(String gender) {this.gender = gender;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public int getClazz() {return clazz;}public void setClazz(int clazz) {this.clazz = clazz;}@Overridepublic String toString() {return "Student{" +"id=" + id +", name='" + name + '\'' +", gender='" + gender + '\'' +", age=" + age +", clazz=" + clazz +'}';} }?
package net.lbd.mybatis.bean;import java.util.List;public class Clazz {private int id;private String name;private Teacher teacher;private List<Student>students;public int getId() {return id;}public void setId(int id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public Teacher getTeacher() {return teacher;}public void setTeacher(Teacher teacher) {this.teacher = teacher;}public List<Student> getStudents() {return students;}public void setStudents(List<Student> students) {this.students = students;}@Overridepublic String toString() {return "Clazz{" +"id=" + id +", name='" + name + '\'' +", teacher=" + teacher.getName() +", students=" + students +'}';} }?
班級映射器配置文件
附上代碼:
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"><mapper namespace="net.lbd.mybatis.mapper.ClazzMapper"><!--三表關聯查詢--><select id="findById" parameterType="int" resultMap="ClazzResultMap">select * from t_teacherinner join t_class on t_class.teacher_id = t_teacher.t_idinner join t_student on t_class.c_id = t_student.class_idwhere c_id =#[id];</select><!--定義班級的結果映射--><resultMap id="clazzResultMap" type="Clazz"><result column="c_id" property="id"/><result column="c_name" property="name"/><!--建立一對一的關聯--><association property="teacher" column="teacher_id" javaType="Teacher"><result property="id" column="t_id"/><result property="name" column="t_name"/></association><!--建立一對多的關聯--><collection property="students" ofType="Student"><result property="id" column="s_id"/><result property="name" column="s_name"/><result property="gender" column="s_gender"/><result property="age" column="s_age"/><association property="clazz" column="class_id" javaType="Clazz"><result property="name" column="c_name"/></association></collection></resultMap><select id="findAll" resultMap="clazzResultMap2">select * from t_class;</select><!--定義班級的結果映射--><resultMap id="clazzResultMap2" type="Clazz"><result column="c_id" property="id"/><result column="c_name" property="name"/><association property="teacher" column="teacher_id" javaType="Teacher" select="getTeacher"/></resultMap><select id="getTeacher" resultType="Teacher">select t_id id,t_name name from t_teacher where t_id=#{id};</select></mapper>關系圖,這個圖可以幫助理解映射文件
在mybatis-config.xml配置文件中,添加圖中圈出的代碼
?
?
?
?
?
?
?
?
遇到的問題
?
總結
以上是生活随笔為你收集整理的mybitis第三讲:关联查询的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Spring第一讲:初步了解Spring
- 下一篇: 学期 期末总结