小新*

导航

 

比如一个老师拥有多个学生,

环境搭建

在mubatis06的基础上重新建mybatis07步骤

  1. 导入依赖

  2. 导入配置文件

  3. 将java下的文件导入

  4. 环境搭建和上次一样

实体类

private  int id;
    private String name;
    //一个老师拥有多个学生
    private List<Student> students;
private  int id;
private String name;
private int tid;

按结果嵌套处理

<!--按结果嵌套查询-->
    <!--未改动之前查不出学生信息-->
    <select id="getTeacher" resultMap="TeacherStudent">
       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=#{tid};
    </select>
    <resultMap id="TeacherStudent" type="Teacher">
        <result property="id" column="tid"/>
        <result property="name" column="tname"/>
        <!-- 如果属性是一个对象,我们用assocation,如果属性是一个集合,我们用collection-->
        <!--javaType是一个指定的属性的类型,集合中的泛型信息,我们使用ofType-->
        <collection property="students"  ofType="Student">
            <result property="id" column="sid"/>
            <result property="name" column="sname"/>
            <result property="tid" column="tid"/>
        </collection>
    </resultMap>

按查询嵌套处理

<!--按子查询嵌套查询-->
<select id="getTeacher2" resultMap="TeacherStudent2">
    select * from mybatis.teacher where id=#{tid}
</select>

<!--本质上还是一个老师-->
<resultMap id="TeacherStudent2" type="Teacher">
    <!--因为返回值类型是集合,所以要是用javaType-->
    <collection property="students" javaType="ArrayList" ofType="Student" select="getStudentByTeacherId" column="id"/>
</resultMap>

<select id="getStudentByTeacherId" resultType="Student">
    select *from mybatis.student where tid=#{tid};
</select>

关联-association【多对一】

集合-clooection【一对多】

1.javaType与ofType的区别:

  • javaType用来指定实体类中属性的类型
  • ofType用来指定映射到List或者集合中的pojo类型,泛型中的约束类型

注意点:

  • 保证sql的可读性,尽量保证通俗易懂
  • 注意一对多和多对一中,属性名和字段名的问题
  • 假设问题不好排查错误,可使用日志
posted on 2022-12-01 19:36  小新*  阅读(31)  评论(0)    收藏  举报