对象关系映射
在实际开发中,实体类之间有一对一、一对多、多对多的关系,所以需要正确配置它们对应关系,Mybatis通过配置文件能够从数据库中获取列数据后自动封装成对象。
1.泛化关系--------->>(继承关系)
2.实现关系 ----------->>>(实现关系)
3.依赖关系 ----------------->>>(体现在某个A类引用另外一个B类作为A类的成员变量或者方法中)
4.关联关系---->(重点)
4.1关联关系----->>>>>>一对一(分为单向和双向)
4.2关联关系------->>>>>多对一(单向)
4.3关联关系------->>>>>一对多(单向)
4.4关联关系------->>>>>一对多和多对一(双向)
4.关联关系----------->>>>>>多对多
5.聚合关系--------->>>(体现在一个A类中引用另外一个B类作为A类的成员变量中,缺少这个引用他不会出错)
6.组合关系-------->>>>(体现在一个A类中引用量另外一个B类作为A类的成员变量,但是这个B类的引用是多个,比如是集合类型或者数组类型)
以上就是对象映射关系的分类和详解,但是上面只是说了在程序中的关联关系,在下面再说一下这些映射关系在数据库设计表的时候,具体是怎么回事
-------------------------------------------------------------------------------------------------------------------------
1.泛化关系表的设计
比如普通用户, 员工, 客户这三个表的设计, 分了三种设计思想: (1)直接共用一张表;需要加上一列用来区分不同类型 (2)每个子类设计一张表; 把普通用户设计成一个表, 由于员工和客户是普通用户的子类, 所以在普通用户表中会有所有人的字段, 但是由于员工他有salary列并且客户有address这个列, 因此使用普通用户表来存他们共有的字段, 然后再使用员工表和客户表来存储他们各自拥有的属性 (3)每个类简历一个表,这种比较容易理解,不用细说
2.实现关系表的设计和依赖关系表的设计跟泛化关系表的设计雷同,省略
3.关联关系表的设计
3.1一对一
3.2一对多(跟多对一表设计一样)
4.3多对多表的设计
引入另外一张表,把这两个表的主键存放在另一张表中
5集合关系和组合关系表的设计是一致的,两个一块弄了
======================================================================================
以上就是关联映射的细节详解,最重要的,难理解的就是关联关系的那部分,另外附关联关系中一对多或者多对一中在查询的时候会存在额外sql的问题的图的两种解决办法
解决方案:
1.是在查询的时候发送一条额外sql, 如下图
2.使用内联映射,利用多表连接查询