hibernate的作用(hibernate工作原理及为什么要用)
您好,蔡蔡就为大家解答关于hibernate的作用,hibernate工作原理及为什么要用相信很多小伙伴还不知道,现在让我们一起来看看吧!
1、hibernate 简介:hibernate是一个开源框架,它是对象关联关系映射的框架,它对JDBC做了轻量级的封装,而我们java程序员可以使用面向对象的思想来操纵数据库。
2、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、2. Hibernate是一个基于JDBC的主流持久化框架,是一个优秀的ORM实现。
4、他很大程度的简化DAO层的编码工作3. hibernate使用Java反射机制,而不是字节码增强程序来实现透明性。
5、4. hibernate的性能非常好,因为它是个轻量级框架。
6、映射的灵活性很出色。
7、它支持各种关系数据库,从一对一到多对多的各种复杂关系。
8、 Hibernate是如何延迟加载?get与load的区别1. 对于Hibernate get方法,Hibernate会确认一下该id对应的数据是否存在,首先在session缓存中查找,然后在二级缓存中查找,还没有就查询数据库,数据 库中没有就返回null。
9、这个相对比较简单,也没有太大的争议。
10、主要要说明的一点就是在这个版本(bibernate3.2以上)中get方法也会查找二级缓存!2. Hibernate load方法加载实体对象的时候,根据映射文件上类级别的lazy属性的配置(默认为true),分情况讨论: (1)若为true,则首先在Session缓存中查找,看看该id对应的对象是否存在,不存在则使用延迟加载,返回实体的代理类对象(该代理类为实体类的子类,由CGLIB动态生成)。
11、等到具体使用该对象(除获取OID以外)的时候,再查询二级缓存和数据库,若仍没发现符合条件的记录,则会抛出一个ObjectNotFoundException。
12、(2)若为false,就跟Hibernateget方法查找顺序一样,只是最终若没发现符合条件的记录,则会抛出一个ObjectNotFoundException。
13、这里get和load有两个重要区别: 如果未能发现符合条件的记录,Hibernate get方法返回null,而load方法会抛出一个ObjectNotFoundException。
14、load方法可返回没有加载实体数据的代 理类实例,而get方法永远返回有实体数据的对象。
15、(对于load和get方法返回类型:好多书中都说:“get方法永远只返回实体类”,实际上并不正 确,get方法如果在session缓存中找到了该id对应的对象,如果刚好该对象前面是被代理过的,如被load方法使用过,或者被其他关联对象延迟加 载过,那么返回的还是原先的代理对象,而不是实体类对象,如果该代理对象还没有加载实体数据(就是id以外的其他属性数据),那么它会查询二级缓存或者数 据库来加载数据,但是返回的还是代理对象,只不过已经加载了实体数据。
16、)总之对于get和load的根本区别,一句话,hibernate对于 load方法认为该数据在数据库中一定存在,可以放心的使用代理来延迟加载,如果在使用过程中发现了问题,只能抛异常;而对于get方 法,hibernate一定要获取到真实的数据,否则返回null。
17、Hibernate中怎样实现类之间的关系?(如:一对多、多对多的关系)类与类之间的关系主要体现在表与表之间的关系进行操作,它们都市对对象进行操作,我们程序中把所有的表与类都映射在一起,它们通过配置文件中的many-to-one、one-to-many、many-to-many、说下Hibernate的缓存机制:Hibernate缓存的作用: Hibernate是一个持久层框架,经常访问物理数据库,为了降低应用程序对物理数据源访问的频次,从而提高应用程序的运行性能。
18、缓存内的数据是对物理数据源中的数据的复制,应用程序在运行时从缓存读写数据,在特定的时刻或事件会同步缓存和物理数据源的数据Hibernate缓存分类: Hibernate缓存包括两大类:Hibernate一级缓存和Hibernate二级缓存Hibernate一级缓存又称为“Session的缓存”,它是内置的,意思就是说,只要你使用hibernate就必须使用session缓存。
19、由于Session对象的生命周期通常对应一个数据库事务或者一个应用事务,因此它的缓存是事务范围的缓存。
20、在第一级缓存中,持久化类的每个实例都具有唯一的OID。
21、 Hibernate二级缓存又称为“SessionFactory的缓存”,由于SessionFactory对象的生命周期和应用程序的整个过程对应,因此Hibernate二级缓存是进程范围或者集群范围的缓存,有可能出现并发问题,因此需要采用适当的并发访问策略,该策略为被缓存的数据提供了事务隔离级别。
22、第二级缓存是可选的,是一个可配置的插件,在默认情况下,SessionFactory不会启用这个插件。
23、什么样的数据适合存放到第二级缓存中? 1 很少被修改的数据 2 不是很重要的数据,允许出现偶尔并发的数据 3 不会被并发访问的数据 4 常量数据 不适合存放到第二级缓存的数据? 1经常被修改的数据 2 .绝对不允许出现并发访问的数据,如财务数据,绝对不允许出现并发 3 与其他应用共享的数据。
24、 Hibernate查找对象如何应用缓存?当Hibernate根据ID访问数据对象的时候,首先从Session一级缓存中查;查不到,如果配置了二级缓存,那么从二级缓存中查;如果都查不到,再查询数据库,把结果按照ID放入到缓存删除、更新、增加数据的时候,同时更新缓存Hibernate管理缓存实例无论何时,我们在管理Hibernate缓存(Managing the caches)时,当你给save()、update()或saveOrUpdate()方法传递一个对象时,或使用load()、 get()、list()、iterate() 或scroll()方法获得一个对象时, 该对象都将被加入到Session的内部缓存中。
25、 当随后flush()方法被调用时,对象的状态会和数据库取得同步。
26、 如果你不希望此同步操作发生,或者你正处理大量对象、需要对有效管理内存时,你可以调用evict() 方法,从一级缓存中去掉这些对象及其集合。
27、 Hibernate的查询方式Sql、Criteria,object comptositionHql: 属性查询2、 参数查询、命名参数查询3、 关联查询4、 分页查询5、 统计函数 如何优化Hibernate?1.使用双向一对多关联,不使用单向一对多2.灵活使用单向一对多关联3.不用一对一,用多对一取代4.配置对象缓存,不使用集合缓存5.一对多集合使用Bag,多对多集合使用Set6. 继承类使用显式多态7. 表字段要少,表关联不要怕多,有二级缓存撑腰hibernate的开发步骤:开发步骤 1)搭建好环境 引入hibernate最小的jar包 准备Hibernate.cfg.xml启动配置文件 2)写实体类(pojo) 3)为实体类写映射文件"User.hbm.xml"在hibernate.cfg.xml添加映射的实体 4)创建库表 5)写测试类 获得Configuration 创建SessionFactory 打开Session 开启事务 使用session操作数据 提交事务 关闭资源。
本文就讲到这里,希望大家会喜欢。
更多知识
-
如何治疗和预防甲流(服务窗·科学防疫)
原标题:如何治疗和预防甲流(服务窗·科学防疫)每年春季是甲流的高发季节,最近一些地方出现了散发病例。什么是甲流?有什么特点?如何治...烟燃烟灭つ 268 阅读
-
iPhone15的type-C接口玩手段,欧盟将重罚,苹果会妥协么?
据称苹果今年的iPhone15将会首次用上type-C接口,不过苹果为了赚取厚利可能会给type-C接口,而欧盟显然也早就为此做好准备,如果苹果执意如...﹏丶小迣界 284 阅读
-
微视频|同心逐梦 共向未来
原标题:微视频|同心逐梦 共向未来春风浩荡中,2023年全国两会通过法定程序把党的二十大作出的决策部署转化为全国人民的实际行动,胜利闭...■■俗人雅钦 187 阅读
-
东方甄选回应直播间疑似售假:会积极解决问题,请不要攻击主播
Tech星球3月16日消息,日前东方甄选被曝将养殖虾当野生虾卖引发热议。昨日晚间,东方甄选官方账号发文回应称,“东方甄选作为一家公司,会...原地等候已经远去的幸福 216 阅读
-
OpenAI 离成熟商业公司更近一步
发布 GPT-4 的同时,OpenAI 离成熟公司越近,离名字里的 “Open” 越远。GPT-4 无疑是一个更好的产品。写散文、诗歌、代码,这些 GP...床上小旋风 281 阅读
-
维珍轨道公司暂停运营一周:员工休无薪假,股价暴跌50%
3月16日消息,据外媒援引知情人士消息称,当地时间周三火箭发射公司维珍轨道决定暂停运营一周时间,并安排大部分员工休无薪假,期间寻求能...冷夕颜 237 阅读
-
推动世界共同发展繁荣 创造更加美好未来
原标题:推动世界共同发展繁荣 创造更加美好未来新华社北京3月13日电题:推动世界共同发展繁荣 创造更加美好未来新华社记者十四届全国人...而后的我们 220 阅读
-
瞭望·治国理政纪事丨马上就办 真抓实干
原标题:瞭望·治国理政纪事丨马上就办 真抓实干 ◆ 1991年2...愚人自愈 203 阅读
撰写回复