hibernate的原理

上传人:天*** 文档编号:295236571 上传时间:2022-05-20 格式:DOC 页数:7 大小:47KB
返回 下载 相关 举报
hibernate的原理_第1页
第1页 / 共7页
hibernate的原理_第2页
第2页 / 共7页
hibernate的原理_第3页
第3页 / 共7页
hibernate的原理_第4页
第4页 / 共7页
hibernate的原理_第5页
第5页 / 共7页
点击查看更多>>
资源描述

《hibernate的原理》由会员分享,可在线阅读,更多相关《hibernate的原理(7页珍藏版)》请在金锄头文库上搜索。

1、hibernate 简介:hibernate是一个开源框架,它是对象关联关系映射的框架,它对JDBC做了轻量级的封装,而我们java程序员可以使用面向对象的思想来操纵数据库。hibernate核心接口:session:负责被持久化对象CRUD操作sessionFactory:负责初始化hibernate,创建session对象 configuration:负责配置并启动hibernate,创建SessionFactoryTransaction:负责事物相关的操作Query和Criteria接口:负责执行各种数据库查询hibernate工作原理:1.通过Configuration config

2、= new Configuration().configure();/读取并解析hibernate.cfg.xml配置文件2.由hibernate.cfg.xml中的读取并解析映射信息3.通过SessionFactory sf = config.buildSessionFactory();/创建SessionFactory4.Session session = sf.openSession();/打开Sesssion5.Transaction tx = session.beginTransaction();/创建并启动事务Transation6.persistent operate操作数据,持

3、久化操作mit();/提交事务8.关闭Session9.关闭SesstionFactory hibernate优点(及为什么使用hibernate):1、封装了jdbc,简化了很多重复性代码。2、简化了DAO层编码工作,使开发更对象化了。3、移植性好,支持各种数据库,如果换个数据库只要在配置文件中变换配置就可以了,不用改变hibernate代码。4、支持透明持久化,因为hibernate操作的是纯粹的(pojo:简单的Java对象,实际就是普通JavaBeans)java类,没有实现任何接口,没有侵入性。所以说它是一个轻量级框架。缓存:a) 数据库级缓存:这级缓存是最高效和安全的,但不同的数据

4、库可管理的层次并不一样,比如,在Oracle中,可以在建表时指定将整个表置于缓存当中。b) session缓存:在一个Hibernate session有效,这级缓存的可干预性不强,大多于HIBERNATE自动管理,但它提供清除缓存的方 法,这在大批量增加/更新操作是有效的。比如,同时增加十万条记录,按常规方式进行,很可能会发现OutofMemeroy的异常,这时可能需要手动清除 这一级缓存:Session.evict以及 Session.clearc) 应用缓存:在一个SESSIONFACTORY中有效,因此也是优化的重中之重,因此,各类策略也考虑的较多,在将数据放入这一级缓存之前,需要考虑

5、一些前提条件:数据不会被第三方修改、数据大小在可接受范围、数据更新频率低、同一数据被系统频繁使用、非关键数据d) 分布式缓存:同c)的配置一样,只是缓存产品的选用不同,oscache, jboss cache,的大多数项目,对它们的用于集群的使用(特别是关键交易系统)都持保守态度。在集群环境中,只利用数据库级的缓存是最安全的。什么是缓存:缓存就是把以前从数据库中查询出来和使用过的对象保存在内存中(一个数据结构中),这个数据结构通常是或类似Hashmap,当以后要使用某个对象时,先查询缓存中是否有这个对象,如果有则使用缓存中的对象,如果没有则去查询数据库,并将查询出来的对象保存在缓存中,以便下次

6、使用.一级缓存:当应用程序调用Session的save()、update()、 saveOrUpdate()、get()或load(),以及调用查询接口的 list()、iterate()或filter()方法时,如果在Session缓存中还不存在相应的对象,Hibernate就会把该对象加入到第一级缓存中。当清理缓存时,Hibernate会根据缓存中对象的状态变化来同步更新数据库。 Session为应用程序提供了两个管理缓存的方法: evict(Object obj):从缓存中清除参数指定的持久化对象。 clear():清空缓存中所有持久化对象。Hibernate的缓存机制:Hibernat

7、e缓存的作用: Hibernate是一个持久层框架,经常访问物理数据库,为了降低应用程序对物理数据源访问的频次,从而提高应用程序的运行性能。缓存内的数据是对物理数据源中的数据的复制,应用程序在运行时从缓存读写数据,在特定的时刻或事件会同步缓存和物理数据源的数据;Hibernate缓存分类: Hibernate缓存包括两大类:Hibernate一级缓存和Hibernate二级缓存Hibernate一级缓存又称为“Session的缓存”,它是内置的,意思就是说,只要你使用hibernate就必须使用session缓存。由于Session对象的生命周期通常对应一个数据库事务或者一个应用事务,因此它的

8、缓存是事务范围的缓存。在第一级缓存中,持久化类的每个实例都具有唯一的OID。 Hibernate二级缓存又称为“SessionFactory的缓存”,由于SessionFactory对象的生命周期和应用程序的整个过程对应,因此Hibernate二级缓存是进程范围或者集群范围的缓存,有可能出现并发问题,因此需要采用适当的并发访问策略,该策略为被缓存的数据提供了事务隔离级别。第二级缓存是可选的,是一个可配置的插件,在默认情况下,SessionFactory不会启用这个插件。什么样的数据适合存放到第二级缓存中? 1 很少被修改的数据 2 不是很重要的数据,允许出现偶尔并发的数据 3 不会被并发访问的

9、数据 4 常量数据 不适合存放到第二级缓存的数据? 1经常被修改的数据 2 .绝对不允许出现并发访问的数据,如财务数据,绝对不允许出现并发 3 与其他应用共享的数据。 Hibernate查找对象如何应用缓存?当Hibernate根据ID访问数据对象的时候,首先从Session一级缓存中查;查不到,如果配置了二级缓存,那么从二级缓存中查;如果都查不到,再查询数据库,把结果按照ID放入到缓存删除、更新、增加数据的时候,同时更新缓存Hibernate管理缓存实例无论何时,我们在管理Hibernate缓存(Managing the caches)时,当你给save()、update()或saveOrU

10、pdate()方法传递一个对象时,或使用load()、 get()、list()、iterate() 或scroll()方法获得一个对象时, 该对象都将被加入到Session的内部缓存中。 当随后flush()方法被调用时,对象的状态会和数据库取得同步。 如果你不希望此同步操作发生,或者你正处理大量对象、需要对有效管理内存时,你可以调用evict() 方法,从一级缓存中去掉这些对象及其集合。 1. Hibernate有哪几种查询数据的方式(1)导航对象图查询(2)OID查询(3)HQL(4)QBC(5)本地SQLHibernate中的update()和saveOrUpdate()的区别:upd

11、ate值是进行更新,saveOrUpdate如果没有主键的时候就增加一条(insert),有主键的时候就修改(update) Hibernate是如何延迟加载?get与load的区别Get方法,会返回一个null对象。Load方法,直接会报异常.load支持延迟加载,get不支持延迟加载。Hibernate跟Mybatis的优缺点(以及两者之间的区别):Hibernate的优点和缺点:优点:1、 程序更加面向对象2、 方便修改配置文件3、 无侵入性缺点:1、效率比JDBC略差; 2、不适合批量操作。Mybatis的优缺点:优点:1. 易于上手和掌握。2. sql写在xml里,便于统一管理和优化

12、。3. 解除sql与程序代码的耦合。4. 提供映射标签,支持对象与数据库的orm字段关系映射5. 提供对象关系映射标签,支持对象关系组建维护6. 提供xml标签,支持编写动态sql。缺点:1. sql工作量很大,尤其是字段多、关联表多时,更是如此。2. sql依赖于数据库,导致数据库移植性差。3. 由于xml里标签id必须唯一,导致DAO中方法不支持方法重载。4. 字段映射标签和对象关系映射标签仅仅是对映射关系的描述,具体实现仍然依赖于sql。5. DAO层过于简单,对象组装的工作量较大。6. 不支持级联更新、级联删除。7. 编写动态sql时,不方便调试,尤其逻辑复杂时。8提供的写动态sql的

13、xml标签功能简单(连struts都比不上),编写动态sql仍然受限,且可读性低。9. 使用不当,容易导致N+1的sql性能问题。10. 使用不当,关联查询时容易产生分页bug。11. 若不查询主键字段,容易造成查询出的对象有“覆盖”现象。12. 参数的数据类型支持不完善。13. 多参数时,使用不方便,功能不够强大。区别:1.hibernate是全自动,而mybatis是半自动2. hibernate数据库移植性远大于mybatis3. hibernate拥有完整的日志系统,mybatis则欠缺一些,mybatis一般和log4j连用。4. sql直接优化上,mybatis要比hibernat

14、e方便很多5. mybatis相比hibernate需要关心很多细节 Hibernate中怎样实现类之间的关系?(如:一对多、多对多的关系)类与类之间的关系主要体现在表与表之间的关系进行操作,它们都市对对象进行操作,我们程序中把所有的表与类都映射在一起,它们通过配置文件中的many-to-one(多对一)、one-to-many(一对多)、many-to-many(多对多)、Hibernate的查询方式Sql、Criteria,object comptositionHql:1、 属性查询2、 参数查询、命名参数查询3、 关联查询4、 分页查询5、 统计函数如何优化Hibernate?1.使用双

15、向一对多关联,不使用单向一对多2.灵活使用单向一对多关联3.不用一对一,用多对一取代4.配置对象缓存,不使用集合缓存5.一对多集合使用Bag,多对多集合使用Set6. 继承类使用显式多态7. 表字段要少,表关联不要怕多,有二级缓存撑腰搭建Hibernate框架:1.加载jar包 : 1.) hibernate3.jar 2.) lib/required必须的包下的所有包 3.) 因为里面的slf-1.5.8是api接口。所以还需要加载一个jar包。就需要下载slf-1.5.8里面的slf4j-nop-1.5.8.jar。2.创建hibernate配置文件,参考projectetc里的hibernate.cfg.xml文件.修改配置jdbc参数3.创建实体类,并写

展开阅读全文
相关资源
相关搜索

当前位置:首页 > IT计算机/网络 > 计算机应用/办公自动化

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号