Hibernate是一个开放源代码的框架,在我们的网上商城中,我们可以很轻松的实现对实体的操作,那都是因为他的便捷。它用面向对象的方式来操作着数据库,所以我们用它可以取代了大部分JDBC的代码。
在application中,我们总是在注入D层中写到了SessionFactory,他是Hibernate的一个接口。其实,Hibernate一共有六个核心类和接口,来了解一下:
Session:他可不是我们用的缓冲哦。他是应用程序和hibernate之间的主要的运行接口,主要的功能就是提供对映射的实体类事例的创建、读取、删除、更新等操作 。
SessionFactory:他是负责初始化Hibernate的,这也就是我们在敲网上商城的时候,在application的dao中总是注入他的原因,这样可以在系统刚刚启动的时候,就初始化了Hibernate。从Factory,我们知道他是用到了工厂模式。
Transaction:这就是事务,我们在点击提交订单的同时,要将购物车的商品清空,这里就是用到了事务,需要在配置文件中配置事务,然后对事务进行开启、关闭、回滚等操作。
Query:在Hibernate2中,我们是用find来执行hql语句的,但是在hibernate3中是用来Query接口来取代find方法的。他可以用?来设定参数,同时可以进行参数的绑定,他还有setEntity() setParameter setPropertyies方法,同时使用list()方法来取得查询结果list的集合。
Criteria:可以执行数据库的查询操作,可以用sql和hql俩种表示方法
Configuration:他是对hibernate进行配置,和对他进行的启动,在启动的过程中,首先定位映射文档的位置,然后读取配置信息,他是启动hibernate时候遇到的第一个对象。
我们都知道,spring和hibernate是轻量级的,而struts是重量级框架,那么二者是怎么区分的呢?
轻量级的框架spring核心文件很小,在运行的时候所需要的资源也比较少,依赖性也比较少。重量级的框架,像是struts和EJB启动的时候,需要消耗很多的内存、CPU等,依赖的东西也比较多,需要其他的容器才能运行。
假如不延迟加载,也就是非延迟加载,也就是在读取一个对象的时候,会将和这个对象有关的其他对象一起读取出来,这样就会导致整个数据库在系统刚刚初始化阶段就已经读出来了,这样是不是很消耗性能。
我们知道,在hibernate的映射文件中,会定义很多的关联实体,比如一对多,多对一等,hibernate也会使用延迟加载来加载关联实体。
关联实体是多个实体时候,包括一对多和多对多,此时关联实体将以集合的形式存在,hibernate将使用PersistentSet、PersistentList等集合来管理延迟加载的实体。
实现关联实体是单个实体的时候,包括一对一和多对一,延期加载是一个动态生成的代理对象,忽然觉得代理模式真的是好高大上。这俩个元素也可通过lazy属性来指定延迟加载。
这个orm(object relational mapping)框架之一,让我们只需要提供持久化类和表的映射关系,在运行的时候就能参照映射文件的信息,把对象持久化到数据库中,真的是大大的方便了我们的编程啊。