先搭建环境,配置文件都是一样的,实体类不一样了
package com.li.pojo;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.List;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Teacher {
private int id;
private String name;
//一个老师对应多个学生老师实体类下需要有一个学生类型的集合
private List<Student> students;
}
package com.li.pojo;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Student {
private int id;
private String name;
private int tid ;
}
<!--按照结果嵌套处理-->
<select id="getTeacher1" resultMap="TeacherStudent">
SELECT s.id sid,s.name sname,t.name tname,t.id tid
FROM teacher t,student s
WHERE t.id = s.tid and tid = #{tid}
</select>
<!--id对应上面的resultMap值 type对应需要映射的实体类-->
<resultMap id="TeacherStudent" type="Teacher">
<!--property对应实体类属性,column对应数据库表的列名-->
<result property="id" column="tid"/>
<result property="name" column="tname"/>
<!--复杂属性单独处理对象用 association 集合用collection -->
<!--property需要处理的集合名称 ofType集合内的泛型-->
<collection property="students" ofType="Student">
<result property="id" column="sid"/>
<result property="name" column="sname"/>
<result property="tid" column="tid"/>
</collection>
</resultMap>
二、按照sql语句嵌套处理
<select id="getTeacher1" resultMap="TeacherStudent">
select * from mybatis1.teacher where tid = #{id}
</select>
<resultMap id="TeacherStudent" type="Teacher">
<result property="id" column="id"/>
<result property="name" column="name"/>
<!--property实体类中的特俗属性 javaType对应集合类型 ofType对应泛型的类型 select需要关联的sql语句名称 column需要传递过去关联的参数-->
<collection property="students" javaType="ArrayList" ofType="Student" select="getStudentByTeacherid" column="id"/>
</resultMap>
<select id="getStudentByTeacherid" resultType="Student">
select * from mybatis1.student where tid = #{tid}
</select>
没怎么学明白按照语句嵌套处理,后面来补