深入浅出 最新版 MyBatis-3.5.6_ 5. MyBatis 一对一 & 一对多 级联查询

介绍这个级联查询之前,我们先来说说 一对一,一对多是什么玩意

一、一对一、一对多

我们来想一个问题,你和苹果的问题。

好比现在你有一个苹果,那么这个苹果和你就是一一对应的。

如果这个时候我们去设计表的时候,可以直接将苹果当做一个属性,和人这个主表存放到一起。如下

但是,苹果可以是多个,而你只能有一个,也就是说,在后续的时候,你也有可能会拥有多个苹果,这样的话,苹果和你就是多对一的关系。

那么,上面的这个表我们就没有办法使用了,我们需要创建两张表来维护这个关系。

OK,知道了这个之后,我们呢开始进行我们的学习。

二、一对一

我们这里就修改一下之前的那个例子,我们不是加了一个学校吗,这里我们添加一个学校实体,里面属性一个是学校 id,一个是学校名称。

OK,自己创建一下。

创建好之后,我们来开始进行关联,首先我们在学生表中创建一个对象,就是这个学校对象,然后对应的 get、set 都弄好了。

接着我们来修改一下 StudentMapper,我们增加一个 resultMap。

但是这样还不行,我们还需要用到一个东西,打开 MyBatis 官网,我们来看一下这个:

我们呢,就通过这个去设置一下关联,然后我们在查询的时候顺便查看出来学校。

我们通过 association 进行级联之后,将 school 的内容关联到我们的学生,这里我们需要告诉 association property属性,这个是对应的映射关系。详细我们可以看官网

然后就是 association 里面的标签了,这个里面就是对应的 school 的属性,这里注意的就是,column 对应的是数据库中的学校 id,而 property 是对应的 实体类中的属性。

然后我们运行一下。

OK 的啊。

三、一对多

这里我们可以通过学校反过来去查询学生,这样就可以实现一对多的查询,下面我们来试一下。

这里我们需要给学校实体中添加一个学生集合。

然后自己添加一下 get set 方法,还有 toString 方法。

有了这个之后,我们去创建 Mapper 接口。

这里我们多些一个 resultMap,不想写的可以从我们之前的 xml 文件中拷贝一个

我们接着来测试一下。

可以看到是没有问题的。

四、优化

我们上面讲述的那两个一对一,一对多的方法用是可以用,但是不好,我们对他们优化一下。

1. 一对一

首先我们先看官方文档,我们就按照这个去修改

然后我们找到 StudentMapper.xml,按照官网给的,我们注释掉,然后改成我们的

当然啊,这里我们缺少 select 的这个方法,所以,我们需要去 School 中添加一下

当然啊,Java 接口中自己也添加一下!!!

这里主要注意一下 select,因为我们是写在两个 Mapper 中,所以需要指定一下,不然的话就找不到 getSchool 这个方法~~~

2. 一对多

一对多其实和这个一对一很类似,我们先来上官网的例子

同样,我们也继续修改,先在学生映射器中添加我们的查询。

然后是学校映射器

然后我们写接口测试一下。

我们以后呢,就使用第二种方式进行关联查询,这样我们的代码复用性高,省的到处写一大堆东西。

 

到这里为止,我们的 MyBatis 一对一 & 一对多 级联查询 就完成了,东西有点多,大家好好消化一下。

大家可以自己好好查查看,有不懂的可以联系我 QQ:2100363119

欢迎大家访问我的网站:https://www.lemon1234.com

可以的话关注一下我的公众号,就在我网站,每天都有更新~~~,无限资源畅游 Java,感谢~

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

他 他 = new 他()

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值