使用hibernate一段时间了,但是没有系统的考虑过到底什么是怎样的,也就是说没有一个整体的架构,参考了百度百科中对hibernate的简绍,在这里做个总结(详细了解可以查看百度百科中的hibernate),便于记忆。
一、Hibernate是一个开发源码的对象关系映射框架,最具革命意义的是,hibernate可以在应用EJB的J2EE架构中取代CMP(Container-Managed Persistence)完成数据持久化的重任。
二、核心接口(6个):
1.Session:负责执行被持久化对象的CRUD操作(session对象是非线程安全的)。
2.SessionFactory:负责初始化Hibernate,充当数据存储源的代理,并负责创建Session对象。(用到了工厂模式,不是轻量级的,一个数据库中最好只创建一个)。
3.Transaction:是对实际事务实现的一个抽象,这些实现包括JDBC事务或者JTA等。这样设计允许开发人员能够使用一个统一的事务操作接口使得自己的项目可以在不同的环境和容器(Container)之间方便地迁移。
4.Query:负责各种数据的查询功能,可以使用HQL和SQL。
5.Criteria。
6.Configuration:负责Hibernate的配置工作,创建SessionFactory对象。在Hibernate的启动过程中,Configuration类的实例首先定位映射文件位置、读取配置,然后创建SessionFactory对象。
三、缓存管理:提供了两级CaChe(高速缓冲存储器)
第一级缓存是Session级别的缓存,属于事务范围的缓存,由hibernate管理。
第二级缓存是SessionFactory级别的缓存,属于进程范围或群集范围的缓存,可以进行配置和更改,动态加载和卸载。hibernate为查询结果集提供了一个查询缓存,依赖于第二级缓存。
四、延迟加载
这种初始化策略只在一个对象调用它的一对多或多对多关系时才将关系对象读出来。缺点:要求hibernate会话在对象使用时一直开着,就是Session保持打开状态(spring在整合hibernate时可以解决)。
五、Hibernate工作原理(9步)
1.通过Configuration().configure();读取并解析hibernate.cfg.xml配置文件。
2.由hibernate.cfg.xml中的<mapping resource="com/xx/User.hbm.xml"/>读取解析映射信息。
3.通过config.buildSessionFactory();得到sessionFactory。
4.sessionFactory.openSession();得到session。
5.session.beginTransaction();开启事务。
6.persistent operate;
7.session.getTransaction().commit();提交事务。
8.关闭session;
9.关闭sessionFactory;
六、Hibernate优点(4点)
1.封装了jdbc,简化了很多重复性代码。
2.简化了DAO层编码工作,使开发更对象化(DAO:Data Access Object数据访问对象)。
3.移植性好,支持各种数据库,更好数据库时只需修改配置文件(hibernate.cfg.xml)。
4.支持透明持久化,因为hibernate操作时纯粹的(pojo)java类,没有侵入性,所以说它是一个轻量级框架。(pojo:Plain Ordinary Java Objects简单的java对象;侵入性:使用一个新的技术不会或者基本不改变原有代码结构)。
七、Hibernate优化(4点)
1.使用一对多的双向关联,尽量从多的一端维护。
2.不要使用一对一,尽量使用多对一。
3.配置对象缓存,不要使用集合缓存。
4.表字段要少,表关联不要怕多(二级缓存会处理)。