二刷Mybatis(十)复杂查询(多对一,一对多)

真实情况中,我们处理的是数据库多个表关联查询的任务,如何处理种业务有助于进一步理解Mybatis的应用

1 搭建环境

1.1 实体类pojo

学生和老师:学生关联老师

在这里插入图片描述

1.2 接口

在这里插入图片描述

1.3 接口的配置文件

在这里插入图片描述

1.4 核心配置文件绑定xml

在这里插入图片描述

1.5 测试

在这里插入图片描述

2 多对一的处理 association

多个学生对应一个老师

2.1 未关联Student和Teacher的查询

在这里插入图片描述

在这里插入图片描述

分析:
Q:为什么查不出来教师的信息?
A:因为学生的实体类的属性名 Teacher 和实体类的字段名 tid 不一致
解决办法就是:结果集映射 将两者一致

2.2 方案一

先查询出所有学生的信息------>再根据学生的tid找到对应的老师
select * from Student-------------> select * from Teacher where id = tid

在这里插入图片描述

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.kuang.dao.StudentMapper">


<!-- stu: 接口中定义的方法 -->
    <select id="stu" resultMap="STUDENT">
        select * from student
    </select>
<!-- type: stu的类型是Student -->
    <resultMap id="STUDENT" type="Student">
        <result property="id" column="id"/>
        <result property="name" column="name"/>
        <association property="teacher" column="tid" javaType="Teacher" select="GetTeacher"/>
        <!-- association: 是对象的时候使用( Teacher teacher对象)
             column:数据库字段
             javaType:这里用了别名(扫描包)Teacher的实体类
             select:传入子语句
        -->
    </resultMap>

    <select id="GetTeacher" resultType="Teacher">
        select * from teacher where id=#{tid}
        <!-- {tid}里面的tid可以自定义,不一定为tid,这里为了规范,强调将association的column的tid传过来-->
    </select>

</mapper>

在这里插入图片描述
在这里插入图片描述

2.3 方法二

结果嵌套方法

在这里插入图片描述
在这里插入图片描述

3 一对多的处理 collection

3.1 未关联Student和Teacher的查询

在这里插入图片描述
在这里插入图片描述

3.2 方案一

在这里插入图片描述
在这里插入图片描述

3.3 方案二

在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值