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类型,泛型中的约束类型

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值