浅谈 Mybatis映射、java实体、数据库表的关系。

    技术2022-07-17  84

          终于弄清楚 关于mybatis、java实体、数据库等三者的映射关系。为了和大家分享和探讨,本人结合项目讲述一下自己的看法。想到哪说到哪可以不完整,希望大家补充指点。

              数据库是关系到业务关系,所以可以看作为一个独立体。而mybatis和实体是实现这种业务方法,本质上没有灵魂。研究一个项目首先需要研究数据库。关于当前的业务表关系主要有几类:无关系、一对一、一对多、多对多。如果没有外键关系情况下,mybatis也可以用associate、collection这类链接字。只不过数据无法进行限制(子类添加不考虑父类是否有关联)。所以数据库的设计决定业务是否可行。以一对多为例,一般情况下子类需要添加父类的外键。java子类实体也需要写父类关联属性。为了迎合mybatis需要在父类实体中写一个 list<?> 为了接受多个子类。父类实体在数据库中不需要建立list<>这一列。mybatis另一种接受方法就是再建一个实体接受查询到的数据,这个实体不需要再数据库中建表保存。

    例子:

          用户对订单是一对多的关系,订单对用户是一对一的关系(不要混淆以为多对一,要结合业务进行定义),其他类推。数据数据表关系就是为了限制数据插入操作,以防父类没有数据的情况,子类添加相应的信息。mybatis只是一个工具不在乎业务数据库是否有关联。限制关系由数据库决定。

      逻辑关系梳理清楚后,看看实体和表如何建立:                                     

    用户实体:                                                     订单实体:                           

        

    用户数据库:                                                                          订单数据:(主要user_id外键,这个决定两张表的关系)

                

     mybatis查询:

    mybatis查询多张表的数据后有两种方式进行映射:使用resultMap和resulttype进行接收数据。rusulttype需要在建一个类接收。

    例如:UserCustom将订单数据和用户数据进行汇总。

    mybatis的mapper

    Select可以查询全部数据,页面显示的数据将石有UserCustom映射的数据。

    如果接收实体和数据库列不一样,需要Mapper文件前面添加<sql>如下映射关系。

    (仅仅举例)

    第二种接收方式是对于复杂的接收内容。需要写resultMap实体

    订单实体需要添加 list 接收子类

    Mapper文件:

    association 是只有一个接收子类。collection是接收多个实体使用的关键字(这类就不说一对一,或一对多。因为即使数据库没有关联关系,这些都可以接收到数据)。

     

    以上是查询方式,可以查询多个数据,但是实体接收相对于的数据。resultMap就不要<sql>进行数据库列和实体对应了,也可以替换。resultMap中column对应的内容是Select 查询的数据列明。可以使用别名替换(如果有重复的内容可以使用别名替换)

    获取相关课程和资料欢迎大家留言讨论学习更多资料关注微信公众号“Java领域帝国”

    获取相关课程和资料欢迎大家留言讨论学习更多资料关注微信公众号“Java领域帝国”

    Processed: 0.009, SQL: 10