Mybatis--sql多对一的处理

本文介绍了在Java中实现多对一关联映射的方法,通过Student和Teacher实体类展示了如何建立关联。详细解析了两种不同的查询方式:子查询和联表查询,并提供了对应的XML映射配置。内容涵盖了数据实体、Mapper接口及XML配置,帮助理解Java ORM的多对一关系处理。

  我们先来看看下图所示的例子,学生和老师之间就是一种多对一的关系。
在这里插入图片描述

  • 对于学生这边而言,多个学生关联一个老师【多对一】;这是关联
  • 对于老师这边而言,一个老师包含多个学生【一对多】;这是集合
  1. 测试多对一实例
    数据库表如下图所示:


    步骤一:构造学生实体类Student.java
package com.hpf.bean;

import lombok.Data;
@Data
public class Student {
    private int id;
    private String stuName;
    //每个学生都要关联一个老师
    private Teacher teacher;
}

步骤二:编写StudentMapper.java接口类

package com.hpf.dao;

import com.hpf.bean.Student;
import java.util.List;
public interface StudentMapper {
    //方式一:查询所有学生的信息,并且包含学生对应的老师的信息
    public List<Student> getStudent();
    //方式二:联表查询
    public List<Student> getStudent2();
}

步骤三:编写xml映射配置文件(方式一)

<mapper namespace="com.hpf.dao.StudentMapper">
    <select id="getStudent" resultMap="stu-tea">
        select * from student;
    </select>
    <resultMap id="stu-tea" type="student">
        <result property="id" column="id"/>
        <result property="stuName" column="stu_name"/>
        <!--对于复杂的属性,我们需要单独处理,处理的对象用association-->
        <association property="teacher" column="tea_id" javaType="Teacher" select="getTeacherById"/>
    </resultMap>
    <select id="getTeacherById" resultType="Teacher">
        select * from teacher where id=#{id};
    </select>
</mapper>

思路:
1.查询所有学生信息;
2.根据查询的学生id,寻找对应的老师信息。
这是sql语句的子查询方式,也就是嵌套查询。

编写xml映射配置文件(方式二)

<mapper namespace="com.hpf.dao.StudentMapper">
    <select id="getStudent2" resultMap="stu-tea2">
        select s.id,stu_name,tea_name
        from student s,teacher t
        where s.tea_id = t.id
    </select>
    <resultMap id="stu-tea2" type="Student">
        <result property="id" column="id"/>
        <result property="stuName" column="stu_name"/>
        <association property="teacher" javaType="Teacher">
            <result property="id" column="id"/>
            <result property="teaName" column="tea_name"/>
        </association>
    </resultMap>
</mapper>

思路:
sql语句的联表查询。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值