多对多

作者: 神豪VS勇士赢 | 来源:发表于2018-07-31 22:29 被阅读4次

    一、单向和双向

    包括一对一,一对多,多对多这三种情况,但是每一种又分为单向和双向,在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

    相关文章

      网友评论

          本文标题:多对多

          本文链接:https://www.haomeiwen.com/subject/jzykvftx.html