多对一查询

1、实体类
Student实体类:

public class Student {
private int id;
private String name;
private Teacher teacher;//对象属性


}

Teacheer 实体类:


public class Teacher {
private int id;
private String name;

2、Mybatis配置文件mybatis-config注册Mapper:

<mappers>
    <mapper class="com.kuang.dao.TeacherMapper"/>
    <mapper class="com.kuang.dao.StudentMapper"/>

</mappers>

3、接口
StudentMapper


public interface StudentMapper {
//    学生--老师
 public    List<Student> getStudens();
 }

4、StudentMapper.xml写sql:

<select id="getStudens" resultType="Student">
  select  *  from  student
</select>

5、测试:

public void selectStudent() {

        SqlSession session = MybatisUtils.getSession();//获取
        StudentMapper m = session.getMapper(StudentMapper.class);
        List<Student> stu = m.getStudens();
        System.out.println(stu);
        for (Student s : stu) {
            System.out.println
                    ("学生数据遍历===" + s);

        }


    }

运行结果:
在这里插入图片描述
teacher=null这个查询结果中未查询到teacher的数据

优化

1、按照查询嵌套处理StudentMapper.xm后:

     1<select id="getStudens" resultMap="studentTeacher">

    select  *  from  student
    </select>
    2<resultMap id="studentTeacher" type="Student">
        <result property="id" column="id"/>
        <result property="name" column="name"/>
        <association property="teacher" column="tid" javaType="Teacher" select="getTeacher"/

    </resultMap>
    3<select id="getTeacher" resultType="Teacher">

      select *  from teacher where id=#{id};

     </select>

测试结果:

学生数据遍历=Student(id=1, name=小明, teacher=Teacher(id=1, name=秦老师))
学生数据遍历
=Student(id=2, name=小红, teacher=Teacher(id=1, name=秦老师))
学生数据遍历=Student(id=3, name=小张, teacher=Teacher(id=1, name=秦老师))
学生数据遍历
=Student(id=4, name=小李, teacher=Teacher(id=1, name=秦老师))
学生数据遍历===Student(id=5, name=小王, teacher=Teacher(id=1, name=秦老师

resultMap结果集进行复杂查询的处理association :对象处理

思路:1.查询学生表数据,2.根据tid查询学生对应的老师数据-----》子查询原理

2、按照结果嵌套处理StudentMapper.xm后:

<select id="getStudens1" resultMap="map">

select s.id  sid,s.name sname,
t.name tname  from  student s,teacher t


 </select>

 <resultMap id="map" type="Student">
        <result property="id" column="sid"/>
        <result property="name" column="sname"/>
        <association property="teacher" javaType="Teacher">
        <result property="name" column="tname"/>
  </association>
    </resultMap>

测试结果:
学生数据遍历=Student(id=1, name=小明, teacher=Teacher(id=0, name=秦老师))
学生数据遍历
=Student(id=2, name=小红, teacher=Teacher(id=0, name=秦老师))
学生数据遍历=Student(id=3, name=小张, teacher=Teacher(id=0, name=秦老师))
学生数据遍历
=Student(id=4, name=小李, teacher=Teacher(id=0, name=秦老师))
学生数据遍历===Student(id=5, name=小王, teacher=Teacher(id=0, name=秦老师))

mybatis 多对一查询

1.按照查询嵌套处理-----子查询
2.按照结果嵌套处理-----连表查询

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐