Java面试之hibernate

Java面试之hibernate

Hibernate之我见:

Hibernate的核心思想就是ORM了,即对象到关系的映射。也就是将数据表中的数据表映射为对象,同时通过hibernate也能够把对象自动持久化到关系数据库中。hibernate主要就是充当业务逻辑层与数据库层之间的一个桥梁作用。也是对jdbc思想的一个实现吧。

具体的来说:个人觉得hibernate干了两个事情。

1.就是hibernate将传统的MVC中的业务逻辑层进一步的进行分层。单独分出了持久化层负责数据的持久化操作。

2.Hibernate封装了数据库的访问细节,并且维护着实体类与数据库之间的映射关系。使得业务处理程序通过HibernateAPI可以进行数据库操作。

Hibernate执行流程:

大体上分为两个部分:

1.Session对象的创建。hibernate通过Configuration类的configure方法加载Hibernate配置信息,默认加载hibernate.cfg.xml文件。加载完毕后通过configuration类的buildSessionFactory方法创建SessionFactory对象。SessionFactory是一个生产session对象的工厂。当需要session对象时从此工厂中获取即可。

2.Session对象对数据进行增删改查的操作。Hibernate框架对JDBC作了轻量级的封装,使用hibernate对数据进行操作时,不需要再写繁琐的JDBC代码,完全面向对象的思维模式,其中还加入了对事务的控制。流程如:

A.或许session对象

B.开启事务

C.数据操作有异常回滚事务没有下一步

D.提交事务

E.关闭session对象

Hibernate缓存以及延迟加载

Hibernate中缓存分为两种:Session缓存和SessionFactory缓存。详见:

1.Session缓存(一级缓存)

Session级的缓存,生命周期很短,与session对应。调用session的load,get,save等方法时,hibernate会对实体对象进行缓存;当在同一个session中时再次调用时,hibernate会首先到缓存中查询,找到直接使用。就就不需要发出sql语句到数据库查询。

2.SessionFactory缓存(二级缓存)

二级缓存是sessionFactory级的缓存,生命周期与sessionFactory对应,可以在多个session之间共享。Hibernate中二级缓存需要使用相关的插件。需要进行配置。记不太清了。就是需要把使用二级缓存的属性设置为true。一般的对不是经常更新的数据进行二级缓存,如:热点新闻。如果经常变化的话,使用二级缓存就得不偿失了。

3.Hibernate的延迟加载策略(get和load的区别)

Hibernate通过代理机制实现了延迟加载技术。也就是使用延迟加载的对象,在获取对象的时候返回的是对象的代理,并不是对象的真正引用,只有在对象真正被调用的时候,hibernate才会对其进行查询,返回真正的对象。

Hibernate的关系映射问题

1.关联关系映射

多对一单向:
<many-to-one> 标签使用在多的一端,并使用<column >name属性一的一端的主键标识。

多对一双向:

                  多的一端没有变化,一的一端需要映射文件需要使用<set>标签进行映射。
<set name=”books”>
		<key culume=”categoryId”>
		<ont-to-many class=”Book”>
	</set>

一对一主键关联:

                       User文件中:  <one-to-one name=”idCard”>    

idCare文件中:<one-to-onename=”user”constrained=”true”>

                       //constrained属性用于建立一个约束。

一对一外键关联: 

                    User文件中:<many-to-one name=”idCard” unique=”true”>

多对多关联映射:

                 需要借助第三张表。持久化类中分别加上了set集合。

                 持久化配置文件为:   

<set name=”course” table=”tb_studeng_course”>
				<key column=”studentId”></key>
				<many-to-many class=”Course” column=”courseId”>
			</set>
			//table用于指定第三张表。另外一张表同理。

2.级联操作

级联操作通过cascade属性来实现。属性值可选值:none,save-update,delete,all。

3.继承映射

有三种方法:

1.映射成一张表

2.每个子类映射成一张表

3.每个具体类映射成一张表

Hibernate的hql语句查询

这块涉及到暑假库的知识,看着就闹心。数据库是一块永远的痛啊!等以后心情好了,再看吧!

相关推荐