概述
Hibernate是java中ORMapping思想的具体产品,它是在实体上进行相应的映射。
映射
实现世界中,对象和对象之间的关系有这么四种:无关系、一对一关系、一对多关系和多对多关系,我们的计算机要想以虚拟的方式保存这种关系,必须要解决这个问题。那么,是如何解决的呢?
在代码的级别上,我们采用面向对象编程中,一个类中定义相应类型的属性来解决这个问题。在数据保存中,我们采用相应的数据库解决这个问题。OK,到这里,这个问题已经解决了,但是,在这里,我们会发现这里有一个问题,就是在程序中我们对于数据库的操作和对“程序”的操作是不一样的:一个是面向对象,一个是面向关系,这个问题的解决者就是ORMapping思想,就是把面向关系的部分,变成面向对象,当然,这种变也是相对的,也就是说Hibernate给我们程序员提供了一层封装,使我们操作数据存储时,也是面向对象的操作,所以,Hibernate的映射关系很重要。
具体Hibernate帮我们完成了那些映射呢?分别为:无关系映射、一对一映射、一对多映射、多对多映射、继承映射、组合映射、多主键映射和集合映射,这些映射里面还设计到方向的问题,即:单项映射和双向映射。
在一对一映射中,Hibernate给我们提供了两种策略:主键关联和唯一外键映射,在继承映射中,Hibernate给我们提供了三种策略:继承树共享一张表,每个类一张私有表(公共属性共用父类表)和每个具体类一张全字段表。
HQL语句
HQL是Hibernate提供的一种操作对象和对象属性的语句,这种语句和SQL语句的语法格式几乎一样,其之间最大的不同就是SQL操作的是表和表字段,HQL操作的是类名和属性名。
HQL语句可以使我们的查询变得更加的灵活,避免了必须以实体对象为单位的操作方式,这块内容我们也需要认真学习。
抓取策略
抓取的意思是加载对象内的导航属性,抓取策略就是采用什么样的方式加载对象的导航属性,这块内容的学习,对于之后Hibernate的优化非常的有帮助,正如我们上面说的,Hibernate就是解决这种关系之间的映射,而关系就体现在对象和对象内的导航属性上。
这块内容学习时,要清楚,是否有必要要生成另一条SQL语句,什么时候应该减少生成的另一条SQL语句数量。延迟加载也是抓取策略的一种。
缓存
Hibernate的缓存分为三种:一级缓存、二级缓存和查询缓存,三者是不相同的。
一级缓存和二级缓存只存放实体对象,查询缓存存放属性集合; 一级缓存我们只能操作其缓存内容,不能控制其有无;二级缓存的具体实现是第三方提供的,本身也有提供。
上面之间的关系还有很多,我们需要弄清其之间的关系,其生命周期、操作对象和支持对象(方法或HQL)。
锁
锁的概念是为了解决并发引起数据值的各种问题,Hibernate给我们提供了2种锁:乐观锁和悲观锁,悲观锁映射过去就是对应的SQL语句(加update锁),是通过数据库进行相应的管理的,乐观锁是Hibernate维护一个字段值,进行管理的,类似我们的使用的版本控制。
JPA的Annotation
JPA的全称为Java Persistence API,即java持久化的API,这个是一个规范,是持久化的规范,Annotation是注解的意思,JPA的Annotation的意思是,使用标准持久化API提供的注解进行关系的控制,这里需要注意,Hibernate是JPA的具体实现,Hibernate除了支持JPA的Annotation,它还有自己的一套Annotation,这里我们应该使用标准的,这样对于后期ORMapping框架替换时,有非常大的帮助。
总结
本篇博客,就自己的学习经验,说了一下Hibernate应该学习的东西,希望对大家有帮助。