Mybatis多对一处理

Mybatis中多对一处理

先给出表结构,分别是student表和teacher表,其中student表的tid字段是外键,参照了teacher表的id字段

在这里插入图片描述

在这里插入图片描述

pojo中Student类和teacher类的属性如下:
在这里插入图片描述

[


我们先在StudentMapper.XML中查询学生信息

在这里插入图片描述

在这里插入图片描述

查询出来结果是这样的(这里把student对象也打印出来了)

在这里插入图片描述

通过结果我们发现student表中的记录可以成功显示出来,但是student对象中teacher属性为null

这是因为teacher属性本身也是一个对象,是一个复杂类型的参数,属性名和字段名不一致,因此我们需要重新映射结果集,把resultType改成resultMap

在这里插入图片描述

我们给这个resultMap取名为StudentTeacher,返回的类型还是和之前一样,是student类型

那么对于student对象中的简单属性,我们通过 < result >标签来映射,property是我们java里的属性名,column对于表里的字段名

而teacher是一个复杂类型,我们需要单独拎出来处理,由于学生与老师是多对一的关系,所以这里我们用到了< association >标签

property的值依旧是我们java里面的属性名也就是teacher,column就对应student表中的tid字段

然后这里用到了一个新标签< javaType >,值就是这个属性的java类型,自然就是Teacher类了

然后现在我们先跳过< select >标签,看一下最下面的select标签

这个标签里的sql语句是通过teacher的id查询到teacher的所有字段,也就是说,目前为止,我们缺的teacher的属性的内容,可以通过和这条sql语句连接起来而获得,那么如何获得呢?就是通过在association里添加select标签把这个语句添加进去就行了。

这样一来,我们就补全了student对象中teacher属性的内容了,运行一下看看结果。

在这里插入图片描述

看,teacher的内容也顺利查出来了

不知道大家觉不觉得这种方法很类似于子查询,但这种方法相对来说比较难以理解,所以这里还有另一方法,它不需要像上面一样分成那么多个标签,这个方法就是连表查询。
此外,第一种方法其实还有一个局限性,由于我们是查找student表的字段,其中只有tid字段也就是teacher的id,并没有teaname,所以通过连表查询我们也能查出更详细的信息。


详细的sql语句如下

在这里插入图片描述

这里我们也是要用到resultMap标签,id命名为StudentTeacher1

在这里插入图片描述

对比上面的第一种映射,我们发现其实只有teacher这个属性的标签内容发生了变化,简单类型的属性其实没有改变

这种方法其实是直接把teacher这个类的属性全部列出,而不再是和上面那种方法一样拆成一条查询语句,通过sql语句去查询teacher的内容,由于对teacher类来说,它的属性就都是简单属性,所以我们看起来比较好理解一点(其实就是在student里套娃)

那么我们就直接映射teacher的两个简单属性到数据库即可

运行结果是这样

在这里插入图片描述

可以看到,我们查找的teaname也成功显示出来了


一对多和多对多的示例会在以后给出,谢谢大家捧场,有什么写得不对的地方也欢迎雅正~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值