多对多

一、单向和双向

包括一对一,一对多,多对多这三种情况,但是每一种又分为单向和双向,在hibernate中我们就详细解析过这单向和双向是啥意思,在这里,在重复一遍,就拿一对多这种关系来讲,比如有员工和部门,一个部门中有多个员工,从部门方看,是一对多关系,而多名员工属于一个部门,是多对一关系,那么如果我们的业务需求只需要通过部门查找到所有的员工,那么我们就只需要进行单向一对多的映射,如果我们需要通过员工来查询出对应的部门,那么我们就需要进行单向多对一的映射,而如果我们这两个业务需求都需要实现,也就是不管从哪一方进行查找,都需要能够找到对方,那么此时就应该编写双向一对多或者双向多对一(双向一对多和双向多对一是一样的意思)。所以,不管是编写哪一种,都是根据业务需求来进行决策的。这就是单向和双向的意思。

什么是多对多?

多对多就是不管从哪一方看,都是一对多,那么该关系就是多对多。比如学生跟选修课之间,从学生方看,一个学生能选多门选修课,一对多关系,从选修课之间,一门选修课可以被多个学生选择,也是一对多关系,那么学生跟选修课就是多对多关系。多对多关系之间都会由第三张表来表示这种关系。而不会相互设置外键。

多表关系如下所示:


image.png

多对多映射

查询用户信息,以及它所购买的商品信息 user --》 items

主表:user

从表:orders、orderdetail、items

也就是通过查询某个user,查找到orders,通过orders查找到orderdetail,通过orderdetail查
找到items。

pojo

一个用户拥有多个订单

image.png

一个订单可以拥有多个订单明细


image.png

 一个订单明细对应一个商品

image.png

usermapper.xml

image.png

 通过上面pojo和sql语句,可以知道,我们写的resultMap看起来好像需要很复杂,其实不然,一步步一层层进行编写,也不难。


image.png

如果是一对多关系,那么就使用collection,如果是一对一,那么就使用association,先写user到orders,然后在写orders中的orderdetail,等等,这样一层层嵌套进去,也很明了。不难懂。

此文章是参考的网上的资源 :链接如下:
https://www.cnblogs.com/whgk/p/6721935.html

你可能感兴趣的:(多对多)