已阅读5页,还剩5页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
以下资料为java培训为大家整理:第一次接触Hibernate已经是4年前的事情了,通过myeclipse可以直接生成实体类,甚感框架之神奇,最为神奇的是,习惯使用ibatis之后就再也没用过Hibernate了。 不得不承认,当习惯了一个方式处理一类事情之后,就总设法用最习惯的方式去面对所有问题了,直到遇到了不得不换种方式的时候,现在就是这个时候了。 好,不多废话了,开始整理Hibernate 一、Hibernate入门常识: 1. 面向对象设计的软件内部运行过程可以理解成就是在不断创建各种新对象、建立对象之 间的关系,调用对象的方法来改变各个对象的状态和对象消亡的过程,不管程序运行的过程 和操作怎么样,本质上都是要得到一个结果,程序上一个时刻和下一个时刻的运行结果的差 异就表现在内存中的对象状态发生了变化。 2. 为了在关机和内存空间不够的状况下,保持程序的运行状态,需要将内存中的对象状态保 存到持久化设备和从持久化设备中恢复出对象的状态,通常都是保存到关系数据库来保存大 量对象信息。从Java 程序的运行功能上来讲,保存对象状态的功能相比系统运行的其他功 能来说,应该是一个很不起眼的附属功能,java 采用jdbc 来实现这个功能,这个不起眼的 功能却要编写大量的代码,而做的事情仅仅是保存对象和恢复对象,并且那些大量的jdbc 代码并没有什么技术含量,基本上是采用一套例行公事的标准代码模板来编写,是一种苦活 和重复性的工作。 3. 通过数据库保存 java 程序运行时产生的对象和恢复对象,其实就是实现了 java 对象与关 系数据库记录的映射关系,称为ORM(即Object Relation Mapping),人们可以通过封装 JDBC 代码来实现了这种功能,封装出来的产品称之为 ORM框架,Hibernate 就是其中的一种流行 ORM框架。使用 Hibernate 框架,不用写 JDBC 代码,仅仅是调用一个 save 方法,就可以 将对象保存到关系数据库中,仅仅是调用一个get方法,就可以从数据库中加载出一个对象。 4. 使用Hibernate 的基本流程是:配置 Configuration 对象、产生 SessionFactory、创建 session 对象,启动事务,完成CRUD 操作,提交事务,关闭session . 5. 使用Hibernate 时,先要配置 hibernate.cfg.xml文件,其中配置数据库连接信息和方言等, 还要为每个实体配置相应的hbm.xml 文件,hibernate.cfg.xml文件中需要登记每个hbm.xml 文件。 6. 在应用Hibernate 时,重点要了解 Session的缓存原理,级联,延迟加载和 hql 查询。 细细品读上面这几句话,如果没懂,建议顺延学习Hibernate计划。 二、Hibernate工作原理 Hibernate 的初始化。 读取Hibernate 的配置信息-创建Session Factory 1)创建Configeration类的实例。 它的构造方法:将配置信息(Hibernate config.xml)读入到内存。 一个Configeration 实例代表Hibernate 所有Java类到Sql数据库映射的集合。 2)创建SessionFactory实例 把Configeration 对象中的所有配置信息拷贝到SessionFactory的缓存中。 SessionFactory的实例代表一个数据库存储员源,创建后不再与Configeration 对象关联。 缓存(cache):指Java对象的属性(通常是一些集合类型的属性-占用内存空间。 SessionFactory的缓存中:Hibernate 配置信息。OR映射元数据。 缓存-大:重量级对象 小:轻量级对象 3)调用SessionFactory创建Session的方法 1.用户自行提供JDBC连接。 Connection con=dataSource.getConnection(); Session s=sessionFactory.openSession(con); 2.让SessionFactory提供连接 Session s=sessionFactory.openSession(); 4)通过Session 接口提供的各种方法来操纵数据库访问。 三、Hibernate缓存体系 一级缓存: Session 有一个内置的缓存,其中存放了被当前工作单元加载的对象。 每个Session 都有自己独立的缓存,且只能被当前工作单元访问。 二级缓存: SessionFactory的外置的可插拔的缓存插件。其中的数据可被多个Session共享访问。 SessionFactory的内置缓存:存放了映射元数据,预定义的Sql语句。四、Hibernate中Java对象状态 1.临时状态 (transient) 特征: 1.不处于Session 缓存中 2.数据库中没有对象记录 Java如何进入临时状态 1.通过new语句刚创建一个对象时 2.当调用Session 的delete()方法,从Session 缓存中删除一个对象时。 2.持久化状态(persisted) 特征: 1.处于Session 缓存中 2.持久化对象数据库中设有对象记录 3.Session 在特定时刻会保持二者同步 Java如何进入持久化状态 1.Session 的save()把临时-持久化状态 2.Session 的load(),get()方法返回的对象 3.Session 的find()返回的list集合中存放的对象 4.Session 的update(),saveOrupdate()使游离-持久化 3.游离状态(detached) 特征: 1.不再位于Session 缓存中 2.游离对象由持久化状态转变而来,数据库中可能还有对应记录。 Java如何进入持久化状态-游离状态 1.Session 的close()方法 2.Session 的evict()方法,从缓存中删除一个对象。提高性能。少用。 这个需要看看Hibernate持久对象状态图:五、Hibernate学习建议根据自身经验,J2EE框架学习还是以项目为中心,框架只是让项目更快更好的完成。明白了这一点之后,就需要准备一些相关资料,电子书或图书馆借本厚厚的那些不怎么常用的但可以当字典使用的书籍。当遇到某个功能无法正常实现是,解决方法建议是仿照别人代码-实现功能-重构代码-查看原理-记录心得总之,学习框架的前提是基础已经很扎实,需要提高工作效率才应用的,初级程序员建议还是多增加自己有效代码量,不要过早的去接触成熟框架。Hibernate关系映射之关联映射Hibernate关系映射 1.关联映射 概念:关联映射,就是将关联关系映射到数据库中,所谓的关联关系,在对象模型中,就是一个或多个引用 分类: (1)多对一关联映射 many-to-one 多对一关联映射原理:在多的一端加入一个外键,指向一的一端 在多的一端采用如下标签映射: (2)一对一关联映射 one-to-one A主键关联:即让两个对象具有相同的主键值,以表明它们之间的一一对应的关系;数据库表不会有额外的字段来维护它们之间的关系,仅通过表的主键来关联 示例1: hibernate一对一主键关联映射(单向关联Person-IdCard) 一对一关联映射原理:让两个实体的主键一样,这样就不需要加入多余的字段了(扩展性不好) idCard 示例2: hibernate一对一主键关联映射(双向关联PersonIdCard) 需要在IdCard加入标签, 指示hibernate将关联对象Person根据主键加载上来 不影响存储,只影响加载 标签fetch属性默认为join. B唯一外键关联:外键关联,本来是用于多对一的配置,但是如果加上唯一的限制之后,也可以用来表示一对一关联关系 示例1: hibernate一对一唯一外键关联映射(单向关联Person-IdCard) 一对一唯一外键关联映射,其实是多对一的特例 采用标签来映射,指定多的一端unique为true, 这样就限制了多的一端的多重性为一,就是这样来映射的。 示例2: hibernate一对一唯一外键关联映射(双向关联PersonIdCard) 一对一唯一外键关联双向,采用标签映射, 必须指定标签中的property-ref属性为关系字段的名称 (3)一对多关联映射 one-to-many 示例1: hibernate一对多关联映射(单向Classes-Student) 一对多和多对一的映射原理是一样的,都是在多的一端加入一个外键指向一的一端 它们的区别在于维护的关系不同: *多对一维护的关系:多指向一的关系,如果维护了多指向一的关系,那么加载多的时候会把一加载上来 *一对多维护的关系:一指向多的关系,如果维护了一指向多的关系,那么加载一的时候会把多加载上来 在一的一端维护关系存在缺陷: *因为多的一端Student不知道Classes的存在(也就是Student没有维护与Classes的关系) 所以在保存Student的时候关系字段classesId是为null的,如果将该字段设置为非空,则将无法保存数据 *另外因为Student不维护关系,而Classes维护关系,Classes就会发出多余的update语句,保证Classes和Student有关系,这样加载Classes的时候才能把该Classes对应的学生集合加载上 !- -保存不成功 - -会发出多余的update语句来维持关系 示例2: hibernate一对多关联映射(双向ClassesStudent) 采用一对多双向关联映射的目的主要是为了解决一对多单向关联的缺陷 而不是需求驱动的 一对多双向关联的映射方式: *在一的一端的集合上采用标签,在多的一端加入一个外键 *在多的一端采用标签 !注意: 标签和标签加入的字段保持一
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年宁都县中小学教师招聘笔试参考题库及答案解析
- 急性胰腺炎的科普
- 2025年泉州石狮市中小学教师招聘笔试参考试题及答案解析
- 2025年E类医学联考病理知识考前冲刺备考300题(含答案)
- 2025年环江毛南族自治县中小学教师招聘笔试备考试题及答案解析
- 2025年虚拟演唱会票务系统协议
- 镇卫生院重大公共卫生项目工作总结
- 2025年虚拟数字人直播带货授权合同
- 2025年城步苗族自治县教师招聘参考题库及答案解析
- 云南文化艺术职业学院《动物生物学实验》2024-2025学年第一学期期末试卷
- 2025河北邯郸市产业投资集团有限公司下属企业专业人才招聘78人笔试考试备考试题及答案解析
- 工业气瓶安全使用培训
- 大跨度钢结构厂房吊装方案
- 2025年挖掘机驾驶员岗位招聘面试参考试题及参考答案
- 2025年中央八项规定精神学习教育题库及答案
- 老年人进食照护课件
- 焊工证复审考试题及答案
- 福建省福州市【统招专升本】计算机真题(含答案)
- 统编版九年级上册语文期末复习:全册重点考点手册
- 慢性心力衰竭患者姑息治疗与安宁疗护方案
- 2025内蒙古巴彦淖尔市交通投资(集团)有限公司(第二批)招聘40人笔试考试参考试题及答案解析
评论
0/150
提交评论