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

时间:2024-04-06 17:11:43

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

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

例子:

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

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

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

用户实体:                                                     订单实体:                           

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

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

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

 mybatis查询:

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

例如:浅谈 Mybatis映射、java实体、数据库表的关系。UserCustom将订单数据和用户数据进行汇总。

mybatis的mapper

浅谈 Mybatis映射、java实体、数据库表的关系。Select可以查询全部数据,页面显示的数据将石有UserCustom映射的数据。

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

浅谈 Mybatis映射、java实体、数据库表的关系。(仅仅举例)

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

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

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

Mapper文件:

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

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

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

 

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