电子文档交易市场
安卓APP | ios版本
电子文档交易市场
安卓APP | ios版本

hibernate的原理

7页
  • 卖家[上传人]:天***
  • 文档编号:295236571
  • 上传时间:2022-05-20
  • 文档格式:DOC
  • 文档大小:47KB
  • / 7 举报 版权申诉 马上下载
  • 文本预览
  • 下载提示
  • 常见问题
    • 1、hibernate 简介:hibernate是一个开源框架,它是对象关联关系映射的框架,它对JDBC做了轻量级的封装,而我们java程序员可以使用面向对象的思想来操纵数据库。hibernate核心接口:session:负责被持久化对象CRUD操作sessionFactory:负责初始化hibernate,创建session对象 configuration:负责配置并启动hibernate,创建SessionFactoryTransaction:负责事物相关的操作Query和Criteria接口:负责执行各种数据库查询hibernate工作原理:1.通过Configuration config = new Configuration().configure();/读取并解析hibernate.cfg.xml配置文件2.由hibernate.cfg.xml中的读取并解析映射信息3.通过SessionFactory sf = config.buildSessionFactory();/创建SessionFactory4.Session session = sf.openSession();/

      2、打开Sesssion5.Transaction tx = session.beginTransaction();/创建并启动事务Transation6.persistent operate操作数据,持久化操作mit();/提交事务8.关闭Session9.关闭SesstionFactory hibernate优点(及为什么使用hibernate):1、封装了jdbc,简化了很多重复性代码。2、简化了DAO层编码工作,使开发更对象化了。3、移植性好,支持各种数据库,如果换个数据库只要在配置文件中变换配置就可以了,不用改变hibernate代码。4、支持透明持久化,因为hibernate操作的是纯粹的(pojo:简单的Java对象,实际就是普通JavaBeans)java类,没有实现任何接口,没有侵入性。所以说它是一个轻量级框架。缓存:a) 数据库级缓存:这级缓存是最高效和安全的,但不同的数据库可管理的层次并不一样,比如,在Oracle中,可以在建表时指定将整个表置于缓存当中。b) session缓存:在一个Hibernate session有效,这级缓存的可干预性不强,大多于HIBERN

      3、ATE自动管理,但它提供清除缓存的方 法,这在大批量增加/更新操作是有效的。比如,同时增加十万条记录,按常规方式进行,很可能会发现OutofMemeroy的异常,这时可能需要手动清除 这一级缓存:Session.evict以及 Session.clearc) 应用缓存:在一个SESSIONFACTORY中有效,因此也是优化的重中之重,因此,各类策略也考虑的较多,在将数据放入这一级缓存之前,需要考虑一些前提条件:数据不会被第三方修改、数据大小在可接受范围、数据更新频率低、同一数据被系统频繁使用、非关键数据d) 分布式缓存:同c)的配置一样,只是缓存产品的选用不同,oscache, jboss cache,的大多数项目,对它们的用于集群的使用(特别是关键交易系统)都持保守态度。在集群环境中,只利用数据库级的缓存是最安全的。什么是缓存:缓存就是把以前从数据库中查询出来和使用过的对象保存在内存中(一个数据结构中),这个数据结构通常是或类似Hashmap,当以后要使用某个对象时,先查询缓存中是否有这个对象,如果有则使用缓存中的对象,如果没有则去查询数据库,并将查询出来的对象保存在缓存中,以便下次

      4、使用.一级缓存:当应用程序调用Session的save()、update()、 saveOrUpdate()、get()或load(),以及调用查询接口的 list()、iterate()或filter()方法时,如果在Session缓存中还不存在相应的对象,Hibernate就会把该对象加入到第一级缓存中。当清理缓存时,Hibernate会根据缓存中对象的状态变化来同步更新数据库。 Session为应用程序提供了两个管理缓存的方法: evict(Object obj):从缓存中清除参数指定的持久化对象。 clear():清空缓存中所有持久化对象。Hibernate的缓存机制:Hibernate缓存的作用: Hibernate是一个持久层框架,经常访问物理数据库,为了降低应用程序对物理数据源访问的频次,从而提高应用程序的运行性能。缓存内的数据是对物理数据源中的数据的复制,应用程序在运行时从缓存读写数据,在特定的时刻或事件会同步缓存和物理数据源的数据;Hibernate缓存分类: Hibernate缓存包括两大类:Hibernate一级缓存和Hibernate二级缓存Hibernate一

      5、级缓存又称为“Session的缓存”,它是内置的,意思就是说,只要你使用hibernate就必须使用session缓存。由于Session对象的生命周期通常对应一个数据库事务或者一个应用事务,因此它的缓存是事务范围的缓存。在第一级缓存中,持久化类的每个实例都具有唯一的OID。 Hibernate二级缓存又称为“SessionFactory的缓存”,由于SessionFactory对象的生命周期和应用程序的整个过程对应,因此Hibernate二级缓存是进程范围或者集群范围的缓存,有可能出现并发问题,因此需要采用适当的并发访问策略,该策略为被缓存的数据提供了事务隔离级别。第二级缓存是可选的,是一个可配置的插件,在默认情况下,SessionFactory不会启用这个插件。什么样的数据适合存放到第二级缓存中? 1 很少被修改的数据 2 不是很重要的数据,允许出现偶尔并发的数据 3 不会被并发访问的数据 4 常量数据 不适合存放到第二级缓存的数据? 1经常被修改的数据 2 .绝对不允许出现并发访问的数据,如财务数据,绝对不允许出现并发 3 与其他应用共享的数据。 Hibernate查找对象如何应

      6、用缓存?当Hibernate根据ID访问数据对象的时候,首先从Session一级缓存中查;查不到,如果配置了二级缓存,那么从二级缓存中查;如果都查不到,再查询数据库,把结果按照ID放入到缓存删除、更新、增加数据的时候,同时更新缓存Hibernate管理缓存实例无论何时,我们在管理Hibernate缓存(Managing the caches)时,当你给save()、update()或saveOrUpdate()方法传递一个对象时,或使用load()、 get()、list()、iterate() 或scroll()方法获得一个对象时, 该对象都将被加入到Session的内部缓存中。 当随后flush()方法被调用时,对象的状态会和数据库取得同步。 如果你不希望此同步操作发生,或者你正处理大量对象、需要对有效管理内存时,你可以调用evict() 方法,从一级缓存中去掉这些对象及其集合。 1. Hibernate有哪几种查询数据的方式(1)导航对象图查询(2)OID查询(3)HQL(4)QBC(5)本地SQLHibernate中的update()和saveOrUpdate()的区别:upd

      7、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里,便于统一管理和优化。3. 解除sql与程序代码的耦合。4. 提供映射标签,支持对象与数据库的orm字段关系映射5. 提供对象关系映射标签,支持对象关系组建维护6. 提供xml标签,支持编写动态sql。缺点:1. sql工作量很大,尤其是字段多、关联表多时,更是如此。2. sql依赖于数据库,导致数据库移植性差。3. 由于xml里标签id必须唯一,导致DAO中方法不支持方法重载。4. 字段映射标签和对象关系映射标签仅

      8、仅是对映射关系的描述,具体实现仍然依赖于sql。5. DAO层过于简单,对象组装的工作量较大。6. 不支持级联更新、级联删除。7. 编写动态sql时,不方便调试,尤其逻辑复杂时。8提供的写动态sql的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要比hibernate方便很多5. mybatis相比hibernate需要关心很多细节 Hibernate中怎样实现类之间的关系?(如:一对多、多对多的关系)类与类之间的关系主要体现在表与表之间的关系进行操作,它们都市

      9、对对象进行操作,我们程序中把所有的表与类都映射在一起,它们通过配置文件中的many-to-one(多对一)、one-to-many(一对多)、many-to-many(多对多)、Hibernate的查询方式Sql、Criteria,object comptositionHql:1、 属性查询2、 参数查询、命名参数查询3、 关联查询4、 分页查询5、 统计函数如何优化Hibernate?1.使用双向一对多关联,不使用单向一对多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.创建实体类,并写

      《hibernate的原理》由会员天***分享,可在线阅读,更多相关《hibernate的原理》请在金锄头文库上搜索。

      点击阅读更多内容
    最新标签
    监控施工 信息化课堂中的合作学习结业作业七年级语文 发车时刻表 长途客运 入党志愿书填写模板精品 庆祝建党101周年多体裁诗歌朗诵素材汇编10篇唯一微庆祝 智能家居系统本科论文 心得感悟 雁楠中学 20230513224122 2022 公安主题党日 部编版四年级第三单元综合性学习课件 机关事务中心2022年全面依法治区工作总结及来年工作安排 入党积极分子自我推荐 世界水日ppt 关于构建更高水平的全民健身公共服务体系的意见 空气单元分析 哈里德课件 2022年乡村振兴驻村工作计划 空气教材分析 五年级下册科学教材分析 退役军人事务局季度工作总结 集装箱房合同 2021年财务报表 2022年继续教育公需课 2022年公需课 2022年日历每月一张 名词性从句在写作中的应用 局域网技术与局域网组建 施工网格 薪资体系 运维实施方案 硫酸安全技术 柔韧训练 既有居住建筑节能改造技术规程 建筑工地疫情防控 大型工程技术风险 磷酸二氢钾 2022年小学三年级语文下册教学总结例文 少儿美术-小花 2022年环保倡议书模板六篇 2022年监理辞职报告精选 2022年畅想未来记叙文精品 企业信息化建设与管理课程实验指导书范本 草房子读后感-第1篇 小数乘整数教学PPT课件人教版五年级数学上册 2022年教师个人工作计划范本-工作计划 国学小名士经典诵读电视大赛观后感诵读经典传承美德 医疗质量管理制度 2
    关于金锄头网 - 版权申诉 - 免责声明 - 诚邀英才 - 联系我们
    手机版 | 川公网安备 51140202000112号 | 经营许可证(蜀ICP备13022795号)
    ©2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.