Hibernate关系对映-表映射基于XML配置方式

个人框架初学者,觉得hibernate的内容多,不多写肯定记不下来,写多了也不一定能信手拈来。所以今天写下一个总结,重温一遍,有需要的可以看看,大概分为:

1.对应关系(一对多 多对一 双向一对多 基于主键11基于外键11

多对多),小白只会xml配置方式,请原谅

2.缓存(一级缓存,二级缓存,查询缓存,我博客里有相关文章,这里我不写了)

3.HQL方面的靠自己多多练习,这里也没办法写什么。

 

如果只是需要查询该文章的一个小知识点可以Ctrl+F查询

 

这里需要的jar包:hibernate 4.0需要的jar包,mysqljdbc驱动

 

 

1.单向多对1,这里我会贴出bean类的字段已经对xml配置文件的部分属性解释

 

类比:1个人有多辆车,反之多个车的主人是同一个,所以仅需要在Car里添加字段Person

 

这是carxml配置文件,Person的配置文件和普通bean类配置文件一样


这里主要讲 最后一个属性<many-to-one></many-to-one>,name对应beanperson属性的属性名,column是即将在该表,本处即hibernate_More2One_car 增加一列 Person_id用来对应Person表的主键,从而实现单向多对1Ps:什么为单向,这里 仅个人理解解释一下,hibernate是一个ORM框架,关系对象映射,即对关系的处理,即对表的处理都是通过处理对象来实现关联映射,因为这里是单向的,所以我们仅仅只能使用car类对象获取person的值,而不能通过person获得carlazy属性 懒加载 属性,默认为false 开始即为proxy,何为懒加载,就是在加载主类对象时,不同时加载属性里的对象属性,这里相当于person属性,只有在需要用到的时候才加载,如果再session关闭后进行加载则会抛出懒加载异常


举个例子,我关闭了懒加载异常,session获得一个car对象,这个时候有2个查询语句,但是如果我开启懒加载,同样获得car只需要1个查询语句,但是当你需要获得person时候又发出一条查询语句,如果你开启了懒加载,但是在session关闭后获取person就会抛出异常(Exception in thread "main" org.hibernate.LazyInitializationException: could not initialize proxy - no Session

 

2.单向1对多

Carbean类字段保持不变,改变person

 

CarPersonxml配置文件发生一点变换

 


 

因为是单向的,所以在Car里删除了many to one,并且在person里配置了set属性

Name对应person字段属性名,key属性是在car对应表里增加一个字段,最后生成的2个表的表结构是和上面多对一的表结构是一样的

 

3.双向1对多(也叫双向多对1

  Bean类字段不变,xml属性变。Xml的变化有点类似单向的xml配置文件,即Car里要重新配置一个Many to one 然后Person里还要保持Set属性,上图:

 


 

这里出现了2个前面没有的属性cascade(级联属性),学过数据库的都知道,级联操作就不讲解了,里面有好几个选项,如deleteinverse控制反转,该属性在后面会出现,当true时,即该关联关系的控制权被反转在另一方,如这里的Person inverse属性设置为true则控制权在Car这边,至于这个控制权是什么意思,我在百度上摘录了一段解释:

(控制权在哪边哪边就得负责维护关系,即代码就需要加入相关的set操作,save-update可以减少相应save代码)

http://lijiejava.iteye.com/blog/776587

PS:一般控制权留在多的一方,可以减少update语句,改善性能!

4.基于外键的11

就是在2个关联表里选取一个字段做另一个表主键的外键!

xml



生成的表用mysql查看后:

 

Property-ref这个属性讲一下:

http://blog.csdn.net/fengyuanfa/article/details/5096764

5.基于主键的11

Hibernate有自己的主键生成策略 里面就有一个是 foreign策略,根据其他bean类主键生成自己的主键,相当于绑定起来。生成的表结构都是主键一致的。

 


 

划线的地方可以看看,其次需要讲的就是constrained这个属性:

http://blog.csdn.net/linminqin/article/details/6324567

有个地方需要提醒下,2bean的主键字段类型必须一致,否则会抛出异常

 

 

6.(基于连接表)多对多

 


 

多了一个table属性 是建立用于连接2个表之间的对应关系属性,新表字段为bean类表的主键。其他没什么好讲的。

 

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值