前期准备:
-
建表:
CREATE TABLE `teacher` (
`id` INT(10) NOT NULL PRIMARY KEY,
`name` VARCHAR(30) DEFAULT NULL
)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);
-
创建实体类
Teacher:
package com.pojo;
import java.util.List;
public class Teacher {
private int id;
private String name;
//一个老师有多个学生
private List<Student> studentList;
public Teacher() {
}
public Teacher(int id, String name, List<Student> studentList) {
this.id = id;
this.name = name;
this.studentList = studentList;
}
@Override
public String toString() {
return "Teacher{" +
"id=" + id +
", name='" + name + '\'' +
", studentList=" + studentList +
'}';
}
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 List<Student> getStudentList() {
return studentList;
}
public void setStudentList(List<Student> studentList) {
this.studentList = studentList;
}
}
Student:
package com.pojo;
public class Student {
private int id;
private String name;
//学生需要关联一个老师
private Teacher teacher;
@Override
public String toString() {
return "Student{" +
"id=" + id +
", name='" + name + '\'' +
", teacher=" + teacher +
'}';
}
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 Student(int id, String name, Teacher teacher) {
this.id = id;
this.name = name;
this.teacher = teacher;
}
public Student() {
}
}
多对一:多个学生对应一个老师
-
创建接口StudentMapper
package com.dao;
import com.pojo.Student;
import org.apache.ibatis.annotations.Param;
public interface StudentMapper {
Student getStudent(@Param("id")int id);
}
-
创建mapper映射文件StudentMaper.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.dao.StudentMapper">
<select id="getStudent" parameterType="int" resultMap="getStudentMap">
select s.id sid,s.name sname,t.id as tid,t.name tname
from student s,teacher t
where s.id=#{id} and s.tid=t.id;
</select>
<resultMap id="getStudentMap" type="Student">
<result property="id" column="sid"></result>
<result property="name" column="sname"></result>
<association property="teacher" javaType="Teacher">
<result property="id" column="tid"></result>
<result property="name" column="tname"></result>
</association>
</resultMap>
</mapper>
说明:
property 映射到列结果的字段或属性。
column 数据库中的列名,或者是列的别名。
一对多:一个老师对应多个学生
-
创建接口TeacherMapper
package com.dao;
import com.pojo.Teacher;
import org.apache.ibatis.annotations.Param;
public interface TeacherMapper {
Teacher getTeacher(@Param("id")int id);
}
-
创建mapper映射文件TeacherMaper.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.dao.TeacherMapper">
<select id="getTeacher" parameterType="int" resultMap="getTeacherMap">
select s.id sid,s.name sname,t.name tname,t.id tid
from student s,teacher t
where s.tid=t.id and t.id=#{id};
</select>
<resultMap id="getTeacherMap" type="com.pojo.Teacher">
<result property="id" column="tid"></result>
<result property="name" column="tname"></result>
<!--集合中的泛型信息,我们用oftype获取-->
<collection property="studentList" ofType="com.pojo.Student">
<result property="id" column="sid"></result>
<result property="name" column="sname"></result>
</collection>
</resultMap>
</mapper>
小结
- 关联 - association 多对一
- 集合 - collection 一对多
- javaType & ofType
- JavaType用来指定实体中属性类型
- ofType映射到list中的类型,泛型中的约束类型