java关系映射之代码表示

所有的单向和双向在数据库中么有区别,但是在代码两个实体之间有区别。
                                        
                                         一对一关联
 
1.一对一的单向主键关联(不重要):
例如两张表:Husband和wife,在数据库中设置彼此的主键id相互关联(少用)
此时在两个实体类中不用添加任何的对象属性
2.一对一的单向外键关联
例如两张表:Husband和wife
***在设计实体类时建立联系:
对象模型:只在Husband类中添加属性private Wife wife;并生成getter和setter方法,
         如果不使用多表关联查询HQL语句,那么要进行多表查询需在Husband实体类中再添加private 

int wifeid;属性,
         这也是传统做法
关系模型:以Wife表为主导:
         在Husband表中添加一个字段wifeid,该字段与wife表中的id建立关联关系
或者:
对象模型:只在Wife类中添加属性private Husband husband;并生成getter和setter方法,
         如果不使用多表关联查询HQL语句,那么要进行多表查询需在Wife实体类中添加private int 

husbandid;属性,这也是传统做法
关系模型:以Husband表为主导:
         在wife表中添加一个字段husbandid,该字段与husband表中的id建立关联关系
3.一对一的双向外键关联
对象模型:在Husband类中添加属性private Wife wife;并生成getter和setter方法,同时在
         在Wife类中添加属性private Husband husband;并生成getter和setter方法
关系模型:两种主导关系建立任意一种即可,不必两种主导关系同时建:
         以Wife表为主导:在Husband表中添加一个字段wifeid,该字段与wife表中的id建立关联关系

或者
         以Husband表为主导:在wife表中添加一个字段husbandid,该字段与husband表中的id建立关

联关系
         
4.一对一双向主键关联----(不重要,此处不再介绍)

-------------------------------------------------------------------------------------------

---
总结:一对一单向和双向在数据库中的表现是一样的,区别体现在java程序中,单向只能找一次,双向

可以相互找到
-------------------------------------------------------------------------------------------

---
 
                                 一对多和多对一关联 ---- 原则:在多方添加外键
  两张表:user表和group表
1.多对一的单向关联:
对象模型:根据在多方添加外键的构思:在多方User类中添加属性:private Group group;
关系模型:在user表中添加groupid字段,该字段和group表中的id关联
2.一对多的单向关联:
对象模型:在一的一方设置多方的集合属性:即在group中设置:private Set<User> users = new 

HashSet<User>();//此处最适合使用set集合,因为不会重复
关系模型:和多对一在数据库的表现一致,同样遵循在多方设置外键的思想,即在user表中添加groupid

字段,该字段和group表中的id关联
3.多对一(一对多)的双向关联:
对象模型:在单方添加集合属性,在多方添加对象属性
关系模型:和单向在数据库的表现一致,同样遵循在多方设置外键的思想,即在user表中添加groupid字

段,该字段和group表中的id关联
-------------------------------------------------------------------------------------------

---
总结:数据库表现相同并遵循一个原则:在多方设置外键
一对多或者多对一的双向关联很少用,一般使用单向关联即可,即在多的一方设置联系,
-------------------------------------------------------------------------------------------

---

                                            多对多关联 --- 增加中间表
  两张表:teacher表和student表
1.多对多单向关联:
对象模型:在其中某一个实体类中设置set集合属性
关系模型:增加中间表,包含studentid和teacherid,并分别向两张表做关联
2.多对多双向关联:
对象模型:在两个实体类中均设置set集合属性
关系模型:和单向关联在数据库表现一致,增加中间表,包含studentid和teacherid,并分别向两张表

做关联
-------------------------------------------------------------------------------------------

----
总结:在数据库表现一致:增加中间表,类中设置set集合
-------------------------------------------------------------------------------------------

----

-----------之前的BBS项目中数据库表设计:
新闻表和评论表:
             1.如果要先查询新闻再查询评论,则确定两张表为一对多关系
             2.如果想在查询评论的时候查询它属于哪个新闻,则确定关系为多对一
到底是一对多还是多对一对在数据库中的表现没有影响,都是在多方设置外键,但是在java类中的表现

不同,
是在一方添加set集合属性,还是在多方添加对象属性,这取决于关联关系,既然双向,单向在数据库中

表现一致,
那么在java类中建议设置成双向关联。

--------------------------------------------------------------------
假如Group和User之间是一对多的双向关联,那么应该在User中设置Private Group group;
同时在Group中设置:private Set<User> users = new HashSet<>();
然后就可以:
User user1 = new User("张三",21);
User user2 = new User("李四",20);
Group group = new Group();
group.getUsers().add(user1);
group.getUsers().add(user2);
然后创建集合List,list中每个元素为Group,查询即可。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

智玲君

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值