步骤一:在多的一端的实体类中添加一的类型的对象,表示关联关系
如图:
步骤二:
使用
resultMap标签中的属性:
id属性:给当前resultMap标签设定一个唯一标识,便于在需要的地方引用。通常是
column属性:指定数据库表字段名
property属性:指定Java实体类的属性
如本例:
最大的用处在于表示关联关系:
使用标签,在association标签内部指定被关联的类型和表字段的对应关系。
标签:映射(对一)关联关系,不管自己是(多的一方)还是(一的一方),要求对方是(一的一方)。
property属性:在当前实体类(Student)类型中,用来建立关联关系的属性名,这里是classRoom属性
javaType属性:被关联的实体类全类名(此题为classRoom)
如本例中的:
尚硅谷老师完整解析图:
测试类:
@Test
public void ManyToOne() throws Exception{
//目标:在查询学生信息的同时,将教室信息也查询出来
InputStream in = Resources.getResourceAsStream("Mybatis-config.xml");
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(in);
SqlSession sqlSession = sqlSessionFactory.openSession();
StudentMapper sutdentmapper = sqlSession.getMapper(StudentMapper.class);
// 执行关联查询
Student student = sutdentmapper.selectByName("小绿");
// 打印student本身信息
System.out.println("student="+student);
// 获取关联的classRoom对象
classRoom cr = student.getClassRoom();
System.out.println("classRoom="+cr);
sqlSession.close();
}
StudentMapper.xml:
StudentMapper.java:
package cn.mapper;
import cn.pojo.Student;
public interface StudentMapper {
Student selectByName(String stuName);
}
二、一对多的关联操作
步骤一:在一的一端中维护多的一端的对象,在查询一的一端时就会获得多的一端的值,同时封装成对象。
如图:
步骤二:
同样适用
尚硅谷老师详解图:
测试类:
@Test
public void OneToMany() throws Exception {
//目标:在查询classroom的同时,将与classroom关联的student的数据页查询出来
InputStream in = Resources.getResourceAsStream("Mybatis-config.xml");
SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(in);
SqlSession sqlSession = sessionFactory.openSession();
classRoomMapper roomMapper = sqlSession.getMapper(classRoomMapper.class);
classRoom classRoom = roomMapper.selectByclassId(1);
//输出classRoom被查询出来的结果
System.out.println("classRoom"+classRoom);
//输出关联的student的对象
List student = classRoom.getStudent();
for (Student student1 : student) {
System.out.println("student"+student1);
}
}
classRoomMapper.xml:
classRoomMapper.java:
package cn.mapper;
import cn.pojo.classRoom;
public interface classRoomMapper {
classRoom selectByclassId(int id);
}
三、两张表对应的实体类
classRoom.java(一的一端):
package cn.pojo;
import java.util.List;
public class classRoom {
private Integer cid;
private String className;
//维护一个多的类型,用来建立对多的关联关系
private List student;
public List getStudent() {
return student;
}
public void setStudent(List student) {
this.student = student;
}
public classRoom(Integer cid, String className) {
this.cid = cid;
this.className = className;
}
public classRoom() {
}
@Override
public String toString() {
return "classRoom{" +
"c + cid +
", className='" + className + ''' +
'}';
}
public Integer getCid() {
return cid;
}
public void setCid(Integer cid) {
this.cid = cid;
}
public String getClassName() {
return className;
}
public void setClassName(String className) {
this.className = className;
}
}
Student.java(多的一端):
package cn.pojo;
public class Student {
private Integer sid;
private String stuName;
private Integer stuAge;
private Integer cid;
//维护关联关系
private classRoom classRoom;
public cn.pojo.classRoom getClassRoom() {
return classRoom;
}
public void setClassRoom(cn.pojo.classRoom classRoom) {
this.classRoom = classRoom;
}
public Student() {
}
public Student(Integer sid, String stuName, Integer stuAge, Integer cid) {
this.sid = sid;
this.stuName = stuName;
this.stuAge = stuAge;
this.cid = cid;
}
public Integer getSid() {
return sid;
}
public void setSid(Integer sid) {
this.sid = sid;
}
public String getStuName() {
return stuName;
}
public void setStuName(String stuName) {
this.stuName = stuName;
}
public Integer getStuAge() {
return stuAge;
}
public void setStuAge(Integer stuAge) {
this.stuAge = stuAge;
}
public Integer getCid() {
return cid;
}
public void setCid(Integer cid) {
this.cid = cid;
}
@Override
public String toString() {
return "Student{" +
"s + sid +
", stuName='" + stuName + ''' +
", stuAge=" + stuAge +
", c + cid +
'}';
}
}



