对象管理器范文
对象管理器范文(精选2篇)
对象管理器 第1篇
目前,大量的信息系统使用的都是关系型数据库,即以二维表的形式存储数据,应用系统将处理的数据长久地存储到数据库的过程叫做持久化。由于Java EE系统操作的都是对象,持久化过程需要将对象转成关系表存储。反过来,应用系统操纵关系表中的数据时,需要将取出来的数据封装为java能够操作的对象。上述正反过程叫做ORM(Object-Relationship Mapping,对象关系映射)。为了避免重复书写ORM代码,给系统维护带来不便,同时也为了提高软件开发效率及质量,一些优秀的ORM映射框架脱颖而出,Hibernate就是一款优秀的ORM映射框架[1,2]。
1 Hibernate框架及ORM
Hibernate是JDBC(Java Database Connection,java数据库连接)轻量级的对象封装,是一个独立的对象持久层框架。具有如下显著优势:
1) 应用程序在访问数据库时,Hibernate简化了数据访问层代码,并且对这些代码进行了封装;
2) Hibernate是轻量级框架,很灵活、性能非常好,支持多种数据库平台;
3) 具有相对的独立性,如果底层数据库发生改变,修改持久层配置文件即可。只要提供的API(Application ProgramminInterface)不变,则上层的业务逻辑层不用修改[3];
Hibernate框架有两个重要功能:
1) 对象关系映射ORM
通常来说,一个持久化类对应数据库的一张表,类的每个实例对应表中的一条记录,对象的属性对应表的一个字段,关系数据表之间的关系体现为对象之间的关联关系。面向对象和面向关系概念之间的对应关系如表1所示[4]:
2) 对象管理
ORM(对象关系映射)在关系型数据库中的表和应用程序中对象之间作一个自动的映射关联会起到很大的作用,而在实际操作数据库时,只须通过HQL(Hibernate Query Language对象操作语言)直接操纵对象即可。Hibernate框架负责管理对象,其中的ORM工具会自动将对象的操作转换为SQL语句操作并进行事务管理。
2 Hibernate实体对象生命周期及状态转化[3]
2.1 实体对象生命周期[3]
在java语言中,当用new关键词开辟内存空间创建一个Ja-va对象(以Customer对象为例)时,这个Java对象就开始进入其生命周期。如果没有变量对该对象进行引用,就结束其生命周期,而其所占用的内存就会被JVM的垃圾回收器回收。
应用Hibernate框架进行持久管理,支持下列三种对象状态:
1) 临时状态(Transient):当用new语句创建临时的一个对象,这个对象就占用了内存;但此时该对象在数据库中还没有对应记录,没有给对象分配持久化标识符或是还没有被持久化,与Hibernate的Session毫无关系。Java对象处于临时状态就称为临时对象[4,5,6]。
2) 持久化状态(Persistent):临时对象或是游离状态通过调用session的相应方法转化为持久化对象,此时已被分配到一个持久化标识符,在数据库中已有了相关记录;同时被加载到Session缓存中,与Session的实例关联,服从Session的统一调度。Java对象处于持久化状态下就称为持久化对象[4,5,6]。
3) 游离(脱管)状态(Detached):该状态下的对象已经被持久化过,是由持久化对象转化而来。即使不在session缓存中,但还会被分配一个持久化标志符,也就是在数据库中还有相对应的数据,这是不同于临时对象的。当相关Session被关闭后,调用相应的Session方法,但还是能够重新进入到一个新的会话缓存中。Java对象处于游离状态就称为游离对象[4,5,6]。
Hibernate实体对象三种状态的特征如表2所示。
2.2 Session接口与状态转化
Session作为Hibernate的第一级缓存,是Hibernate向应用程序提供对象操作的主要接口,它的特定方法能使对象从一个状态转化到另一个状态。Hibernate生命周期的各状态及他们之间的转换如图1所示。
图1显示:对象的临时状态经Session的save()方法或save Or Update()转变为持久状态;持久状态经Session的close()、evict()、clear()方法转变为游离状态;游离状态或者持久状态转变为临时状态都是进行Session的delete()操作;临时状态或游离状态下的Java对象,没有其他变量引用它,或者没有与Session缓存关联,JVM的垃圾回收器就会回收java对象所占用的内存,随之它的生命周期彻底结束;若对象处于持久化状态中,在数据库中有对应记录,始终被分配一个持久化标志,Session缓存会引用它,始终占据着内存,如果不进行delete操作,它就始终处于生命周期中。
图2中的代码段显示了对象Customer生命周期的三种状态及其转化。在语句(1)中实例化的customer对象没有与数据库中的记录关联,并且没有被Session缓存管理,因此属于临时对象。语句(2)打开一个会话,获取数据库连接,直到语句(5)关闭会话,将数据库连接归还到连接池,其中的对象受到Session缓存的管理。语句(3)开始一个数据库事务,直到语句(5)提交结束该事务,语句(3)和(5)之间是数据库的操作,通过语句(5)的事务提交使Session缓存对象持久化,和数据库保持一致。因此,可以判断语句(6)中的对象c是持久化对象。语句(8)中的对象在数据库中有对应的记录,但脱离了Session缓存的管理,属于游离对象,如果没有其他对象引用,将被java垃圾回收器回收[4]。
3 Hibernate对象持久优化[6]
Hibernate的Session具有一个由一些集合属性构成的缓存,持久对象的引用保存在集合中,在这些集合中的对象和数据库中的相关记录始终保持着对应,始终使这些Session中的持久化对象永远处于生命周期。Session在某些具体的时间点,按照缓存中持久化对象的属性和状态变化更新数据库,并且与关系数据库的记录保持一致的过程称为清理缓存[5]。
3.1 Session缓存的意义[5]
Session缓存对于数据持久具有十分重要的意义:
1) 降低数据库访问频率,优化数据库访问性能:从内存中读取对象,节省了访问数据库步骤和时间,从而提高程序运行效率。
2) 如果会话缓存中的持久化对象之间是相互循环关联的,Session缓存会杜绝出现程序访问对象图时出现死循环的现象,和由产生的死循环而引发的异常状况,比如内存泄露,堆栈溢出。
3) 实现Session缓存中的持久化对象与关系数据库中的数据保持一致。如果Session缓存中持久化对象的状态改变时,有可能变为临时对象或者游离对象,但在Session缓存中会按照相应的顺序调用session的方法,或者将多条相关的SQL语句合成,程序运行的效率提高,而数据库的访问减少,系统性能实现优化。
3.2 Session缓存清理行为
Hibernate的Session清理缓存是根据缓存中对象的状态变化,按特定顺序执行相关的SQL语句来同步更新数据库的。
1) 一开始程序会调用session.save()方法,将临时对象持久化,让对象变为持久化对象;
2) 再执行insert语句,插入所有的实体对象,刚插入进来的实体对象服从Session的调度管理;
3) 然后执行update语句,对所有实体对象进行更新操作;
4) 接着执行delete语句,对所有集合(List、Map、Set)进行删除操作;
5) 同样是插入、更新、删除的SQL语句,再对所有集合(List、Map、Set)里的元素进行对应操作;
6) 还是执行insert插入操作,这次是对所有集合(List、Map、Set)进行插入;
7) 最后一步调用session.delete()的方法,删除所有实体对象,清空缓存,腾出内存。以上为完整的Session清理缓存的过程,将缓存里的持久化对象转化为临时对象,再用JVM的垃圾回收器将不在占用内存的临时对象回收。
3.3 Session缓存清理时间点[6]
在Session缓存中用set Flush Mode()方法来设置清理缓存的时间点。Flush Mode类定义了三种不同的清理模式:Flush Mode.AUTO、Flush Mode.COMMIT、Flush Mode.NEVER。
如果选用Fulsh Mode.AUTO模式,在这种模式下session.find(),session.iterate(),transaction.commit(),session.flush() 等Session的多种方法和事务管理都能执行清理缓存行为。
如果选用Flush Mode.COMMIT模式,在这种模式下的session.flush(),transaction.commit()都能执行清理缓存;
如果选用Fulsh Mode.NEVER模式,在这种模式下transaction.commit()不能清理缓存,session.find()也不清理缓存,就只能通过session.flush()来清理。
无论设置在哪种Flush Mode清理模式,session.flush()都将会去清理缓存,从上述可知优先考虑使用Flusth Mode.AUTO,很方便地无须手动执行session.flush()。
4总结
Hibernate是一种轻量级的数据持久层框架,使用它能够高效、高质量地开发出Java EE应用程序。论文对Hibernate对象管理机制进行了深入的研究和探讨,对准确、高效地开发持久层应用程序具有重要的意义。
摘要:该文分析了Hibernate框架在应用程序持久层的位置、原理和重要意义。深入研究了Hibernate对象生命周期中的三种状态及其转化关系,并用实际开发中的典型程序段进行了直观形象地说明。阐明了Hibernate的Session缓存对数据持久性能的优化机制[1]。对准确、高效地操作Hibernate对象,编写高质量的持久层应用程序具有重要的参考价值。
关键词:Hibernate实体对象,生命周期,Session缓存,ORM
参考文献
[1]Gavin King,Christian Bauer,Max Rydahl Andersen,et,al.Hiber-nate Reference Documentation
[2]李刚.轻量级Java EE企业应用实战:Struts 2+Spring 4+Hiber-nate整合开发[M].4版.北京:电子工业出版社,2014.
[3]鲍尔,金著.Hibernate实战[M].2版·英文版.北京:人民邮电出版社,2009.
[4]孙卫琴.精通Hibernate:Java对象持久化技术详解[M].2版.北京:电子工业出版社,2010.
[5]树头孤鸟.妙解Hibernate.3.X-叩响面向对象思想之门[M].北京:电子工业出版社,2010.
基于对象管理的邮箱管理教学设计 第2篇
●从对象管理视角解读邮箱管理
对象管理的核心概念是对象、属性、关系、结构。属性指向单个对象,对象具有不同的属性,多个对象根据属性可以形成关系。对象间的各种强弱关系,进而构成了一定的结构。信息技术中的对象与管理不同于日常生活中对具体可见物的管理,它侧重的是对数字化对象的管理,如数字化设备、计算机中的文件、文件中的元素等。
邮箱管理中,通讯录管理的对象外显的是联系人,实际上管理的是邮箱地址;邮件管理的对象是邮件,如邮件的分组、搜索、排序、删除等,都是对邮件的管理操作。因此,联系人与邮件都如同计算机中的文件,是数字化对象。换言之,对象被管理的依据是其属性,而属性又是以数字化方式表示的。
对象属性无处不在,只要对象存在,其自身就携带着相应的属性,如文件具有“大小”“文件类型”等属性。邮件与文件类似,具有“邮件主题”“收件人”“发件人”“发送时间”等属性。
关系是由对象之间的属性形成的。邮件与周围邮件的关系就是建立在属性基础之上。例如,邮件排序,可以根据邮件主题进行升序或降序排序,也可以依据发件人(收件箱页面)或收件人(发件箱页面)排序,还可以根据时间先后顺序进行排序,不同的排序方式中,邮件与周围邮件的关系发生了变化,即邮件之间形成了不同的关系,不同关系构筑成网状结构,但是邮件本身的属性并没有因为排序而发生变化。通讯录管理也类似,管理通讯录强调根据关系将联系人分组,同样的联系人可以根据不同的关系形成不同的分组,使得联系人处于关系圈之中,关系圈之间又形成了一种网状结构。
文件管理、数据管理、邮箱管理,所有的对象都有属性,由属性形成关系,由不同关系构筑结构,结构以交织的网状形式呈现,形成具有完整结构的信息技术管理方式。
就邮箱管理而言,教学目标侧重于学生能在已有的文件管理经验的基础上,进行知识的迁移,通过对邮件、联系人等数字化对象的操作形成管理体验,认识到可以从邮件对象的属性开始认识对象和把握对象,进而将此经验延伸到实际生活中,自觉地把握对象属性、梳理对象间关系并对对象实施有效的管理。
●邮箱管理教学设计
在学习邮箱管理之前,学生已经掌握了申请免费电子邮箱的方法,能够熟练地收发电子邮件,包括带附件的电子邮件。邮箱管理在此基础上展开,学生在收发电子邮件的同时,还需要对自己的邮箱进行管理,掌握管理操作与方法,培养管理意识。
1.通讯录
(1)保存联系人信息
学生学会收发邮件之后,如果需要给全班同学发邮件只能依次输入邮件地址,此时会形成寻找更快速、更高效的方法的需求。这就需要学生能够建立通讯录,并利用通讯录快速给多人发送邮件。邮箱地址类似于电话号码,因此创设情境时,教师可以利用生活中学生比较熟悉的电话通讯录来促成知识的迁移,从而认识到邮箱通讯录是邮箱中保存联系人的姓名、邮箱地址等信息的地方。
教学内容设计:说一说,父母在手机上是通过什么方式记录所有亲戚朋友的电话号码的呢?教师介绍两种保存联系人信息的方式:新建联系人与添加联系人。新建联系人:在通讯录页面,单击“新建联系人”按钮。添加联系人:在读信页面,利用“添加联系人”按钮将好友的邮箱地址添加到通讯录里。教师示范具体的操作方式,也可以安排学生自行探索,继而安排活动,使其选择合适的方式将周围同学的邮箱地址保存到通讯录中。
教学建议:在介绍两种保存方式的过程中,教师注意引导学生分析两种保存方式的区别。新建联系人适用的情形是,知道对方的邮箱地址,但与对方没有邮件往来。添加联系人适用的情形是,收到或发送邮件的联系人,但还没有保存对方的邮箱信息。在添加全班同学的邮箱地址时,教师需要提醒学生选择合适的方式。例如,学生可能与班上某些同学已经有邮件往来,这样最好选择添加联系人的方式;没有邮件往来的同学需要使用新建联系人的方式。除此之外,教师还需要为学生提供几个其他任课教师的邮箱地址,让他们保存在通讯录中,为通讯录管理做准备。
(2)通讯录管理
通讯录管理部分需要让学生明确,所管理的对象是联系人,可以根据不同的关系对联系人进行分组。
教学内容设计:通讯录中添加了较多的联系人之后,就像计算机中存放了很多文件一样,需要进行分类管理,才方便查找。计算机中的文件可以按照属性与非属性等方式分类。学生观察通讯录中的联系人,并思考分组方式。例如,根据与联系人的关系可以分为家人、同学、老师等。
具体操作上,通讯录管理与文件管理类似。面对杂乱无章的文件,需要先建立文件夹,再将文件分类移动到对应的文件夹中。面对通讯录中较多的联系人,也需要先建立组,再将联系人添加到各组中。
教学建议:教师可以让学生根据通讯录来思考如何对联系人分组。“组”的概念在信息技术课程中有着广泛的应用,如学生熟悉的QQ群组等。因此,教学过程中,教师可以引导学生将QQ分组的经验迁移至此。在组织学生管理邮箱通讯录中的联系人时,教师应鼓励学生按照某种属性进行个性化分组。
(3)利用通讯录发邮件
利用通讯录可以快速发邮件,让学生体会其中的效率思想,理解通讯录分组管理的目的。
教学内容设计:有了通讯录之后,写信时,收件人邮箱地址可以不用输入,直接在“通讯录”组中找到收件人,然后单击“联系人”,邮箱地址将自动出现在“收件人”地址框中。这样既可以节省输入时间,又可以避免输入错误。通讯录中联系人较多时,可以对联系人分组管理,以缩小查找范围,快速找到收件人。此外,通讯录中的联系人分组后,可以实现快速给某个组的成员群发邮件,实现一对多的高效交流。进入写信页面,鼠标指向通讯录中的某个组,单击“添加该组”,组内所有成员的邮箱地址都添加到“收件人”地址框中。
教学建议:教师可以利用组发邮件的方式,给全班同学发一封邮件,邮件内容可以是学生接下来需要完成的任务,如分享一张照片给全班同学,并对照片做简要介绍。
2.邮件管理
邮箱中的文件就像计算机中的文件一样,过多就会显得杂乱无章,需要对邮件进行移动、删除等操作管理,使邮箱更整洁。文件管理包括文件的分组、排序、搜索、删除等,邮件管理与之类似,也包括分组、排序、删除等。因此,邮件管理部分的教学需要教师引导学生将文件管理知识迁移至此,提高其对网络资源有效管理的能力。
(1)邮件分组
教学内容设计:邮箱中提供了邮件分组的功能,就像计算机系统中的库,自动将文件分为“视频”“图片”“文档”等类型。邮箱自动将邮件分别存放在“收件箱”“已发送”“草稿箱”等文件夹中。在自动分类的基础上,还可以根据需要对邮箱中的邮件进行手动分类,如将收件箱中的邮件移动到“草稿箱”或“垃圾邮件”。当然,还可以在邮箱中新建文件夹,实现个性化邮件分组管理的方式。例如,在网易的163邮箱中,可以利用页面左边的“+”按钮新建文件夹,建立个性化的邮件分类方式;然后选中邮件,再利用“移动到”按钮将邮件存放在某个文件夹中,将邮件进行分组存放。
教学建议:教学过程中,在邮箱中新建文件夹可以与学生整理文件时新建文件夹的经验结合,促成学生对所学知识进行迁移。
(2)邮件排序
教学内容设计:如果某个分组中邮件太多,很难快速找到需要的邮件,可以根据邮件的发件人、主题等属性进行排序,并根据排序结果查找。邮件的排序是根据邮件的某一属性进行排列。排序的具体操作是:在收件箱页面,单击“更多”,指向“排序”,在弹出的列表中选择一种合适的排序方式。例如,要找某个发件人的邮件,可以将邮件按照发件人进行升序或降序排列。
教学建议:邮件排序所管理的对象即邮件之间以不同的排序方式形成关系,不同的关系又形成结构关系。因此,教师教学时可以安排学生观察某一邮件按照不同的排序方式排序后的结果发生了变化,但邮件的发件人、时间等属性并没有因为排序而发生改变。
(3)邮件删除
邮件删除让学生认识到整理邮箱的重要性,让学习和生活更高效。
教学内容设计:日积月累,邮箱的邮件会越来越多,需要及时删除不需要的邮件,节省邮箱空间。邮件的删除操作与文件删除操作类似,都需要先选中再删除。学生可以整理、删除邮箱中的邮件。
教学建议:文件的删除是先选中再操作,邮箱也类似,所以操作上学生可以根据已有经验自行探索。如果学生邮箱中的邮件较少,教师可以在课前群发几封邮件给学生,以便他们删除时使用。
●小结
从学科核心素养三层架构来看小学阶段的对象管理。“双基”层:学生需要了解不同的对象,以及对象之间的相互关系,知道对象的查找方法;“问题解决”层:能够从文件和数据的时空属性出发提取分类管理的线索,做好所使用的数字设备的信息管理;“学科思维”层:能够将信息社会中的现象置于对象、关系之中加以观察和管理。
对象管理器范文
声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。如若本站内容侵犯了原著者的合法权益,可联系本站删除。


