mybatis联表查询

一对多:
按照结果进行嵌套处理
主要是对结果映射的构建

建两个表,student teacher
pojo类如下

//Student类
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@NoArgsConstructor
@AllArgsConstructor
public class Student {
    private String id;
    private String name;
    private String gender;
    private String age;
    private int tid;
    private Teacher teacher;
    
}

//teacher类
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.util.List;


@Data
@NoArgsConstructor
@AllArgsConstructor
public class Teacher {
    private int id;
    private String name;
private List<Student> students;

}

接口方法:


import java.util.List;

public interface StudentMapper {
    public List<Student> getStudent();
    public List<Student> getStudent2();

}
//teacherMapper类
public interface TeacherMapper {
    public List<Teacher> getTeacher(@Param("tid") int id);
}

映射文件
studentmapper.xml

<!--  ================================-->
<!--    按照结果嵌套处理-->
    <select id="getStudent2" resultMap="studentTeacher2">
        select s.id sid,s.name sname,s.gender sgender,s.age sage,s.tid stid,t.name tname
        from student s,teacher t
        where s.tid=t.id
    </select>

    <resultMap id="studentTeacher2" type="com.grandzio.pojo.Student">
        <result property="id" column="sid"/>
        <result property="name" column="sname"/>
        <result property="age" column="sage"/>
        <result property="gender" column="sgender"/>
        <!--    复杂的属性,需要单独处理,
                对象:association
                集合:collection
        -->
        <association property="teacher" column="tid" javaType="com.grandzio.pojo.Teacher">
            <result property="name" column="tname"/>
            <result property="id" column="stid"/>
        </association>
    </resultMap>

teachermapper.xml

<mapper namespace="com.grandzio.dao.TeacherMapper">
    <select id="getTeacher"  resultMap="teacherStudent">
        select s.id sid,s.name sname,s.gender sgender,s.age sage,s.tid stid,t.name tname
        from student s,teacher t
        where s.tid=t.id and t.id = #{tid}
    </select>
<resultMap id="teacherStudent" type="com.grandzio.pojo.Teacher">
    <result property="name" column="tname"/>
    <result property="id" column="stid"/>
<!--    集合中的泛型信息,使用ofType获取 -->
    <collection property="students" ofType="com.grandzio.pojo.Student">
        <result property="id" column="sid"/>
        <result property="name" column="sname"/>
        <result property="age" column="sage"/>
        <result property="gender" column="sgender"/>
    </collection>

</resultMap>

1、关联:association [多对一]
2、集合:collection 【一对多】
3、JavaType & ofType
javaType 用来指定实体类中属性的类型
ofType 用来指定映射到List或者集合中的pojo类型,泛型中的约束类型


版权声明:本文为qq_43876243原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。