下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Hibernate的三个状态Hibernate中对象的三大状态一、transient(临时态)特点:通过new操作创建出来的对象,此时的对象未被纳入session管理,数据库中没有相对应的记录二、persistent(持久化状态)persistent状态的对象被纳入了session管理,session就相当于Hibernate的一个缓冲区,被纳入session管理的对象(持久化对象)时刻被hibernate所监视,persistent态的对象属性一旦发生改变,就会被hibernate察觉,并会生成相应的sql语句(但并未立即与数据库交互),当session提交时,hibernate会清理缓存(也叫脏数据检查),这时候就会和数据库同步(通过底层的JDBC与数据库交互)。注释:hibernate清理缓存的方式,是采用快照比对的方式(持久化对象的每次变动都会被记录下来)三、detached(托管状态/离线状态)detached状态的对象,数据库中存在,但未被纳入session管理。如果对detached状态的对象加以修改,那么就还得将其纳入一个新的session对象管理,并且还要显示的update(),update后的对象又成为了persistent状态了detached状态的对象是如何产生的呢?有两种方式:1、对象被纳入session管理后,此session清空或者关闭时,这是的对象就称为detached态了2、可手动的构造detached态的对象,通过new操作,new出来的对象,手动setld()将id设成数据库中已经存在的,这时的对象也是detached状态的。(一般不建议采用此法)spring核心spring的两大核心:IoC(控制反转)和DI(依赖注入)Hibernate缓存缓存是位于应用程序与物理数据源之间,用于临时存放复制数据的内存区域,目的是为了减少应用程序对物理数据源访问的次数,从而提高应用程序的运行性能.Hibernate在查询数据时,首先到缓存中去查找,如果找到就直接使用,找不到的时候就会从物理数据源中检索,所以,把频繁使用的数据加载到缓存区后,就可以大大减少应用程序对物理数据源的访问,使得程序的运行性能明显的提升.Hibernate缓存分类:Session缓存,一级缓存.SessionFactory的缓存分为内置缓存和外置缓存.内置缓存中存放的是SessionFactory对象的一些集合属性包含的数据(映射元素据及预定义SQL语句等),对于应用程序来说,它是只读的.外置缓存中存放的是数据库数据的副本,其作用和一级缓存类似.二级缓存除了以内存作为存储介质外,还可以选用硬盘等外部存储设备.Hibernate的缓存范围Hibernate的一级缓存和二级缓存都位于均位于持久层,且均用于存放数据库数据的副本,最大的区别就是缓存的范围各不一样.缓存的范围分为3类:.事务范围事务范围的缓存只能被当前事务访问,每个事务都有各自的缓存,缓存内的数据通常采用相互关联的对象形式.缓存的生命周期依赖于事务的生命周期,只有当事务结束时,缓存的生命周期才会结束.事务范围的缓存使用内存作为存储介质,一级缓存就属于事务范围..应用范围应用程序的缓存可以被应用范围内的所有事务共享访问.缓存的生命周期依赖于应用的生命周期,只有当应用结束时,缓存的生命周期才会结束.应用范围的缓存可以使用内存或硬盘作为存储介质,二级缓存就属于应用范围..集群范围在集群环境中,缓存被一个机器或多个机器的进程共享,缓存中的数据被复制到集群环境中的每个进程节点,进程间通过远程通信来保证缓存中的数据的一致,缓存中的数据通常采用对象的松散数据形式.Hibernate的缓存管理一级缓存的管理:evit(Objectobj)将指定的持久化对象从一级缓存中清除,释放对象所占用的内存资源,指定对象从持久化状态变为脱管状态,从而成为游离对象.clear()将一级缓存中的所有持久化对象清除,释放其占用的内存资源contains(Objectobj)判断指定的对象是否存在于一级缓存中.flush()刷新一级缓存区的内容,使之与数据库数据保持同步.二级缓存的管理:evict(ClassargO,Serializableargl)将某个类的指定ID的持久化对象从二级缓存中清除,释放对象所占用的资源..listmapset区别.Collection接口Collection是最基本的集合接口,一个Collection代表一组Object,即Collection的元素(Elements)o一些Collection允许相同的元素而另一些不行。一些能排序而另一些不行。JavaSDK不提供直接继承自Collection的类,JavaSDK提供的类都是继承自Collection的“子接口”如List和Seto所有实现Collection接口的类都必须提供两个标准的构造函数:无参数的构造函数用于创建一个空的Collection,有一个Collection参数的构造函数用于创建一个新的Collection,这个新的Collection与传入的Collection有相同的元素。后一个构造函数允许用户复制一个Collectiono如何遍历Collection中的每一个元素?不论Collection的实际类型如何,它都支持一个iterator。的方法,该方法返回一个迭代子,使用该迭代子即可逐一访问Collection中每一个元素。典型的用法如下:Iteratorit=collection.iterator();//获得一个迭代子while(it.hasNext()){Objectobj二it.next();//得到下一个元素)由Collection接口派生的两个接口是List和SetoList接口List是有序的Collection,使用此接口能够精确的控制每个元素插入的位置。用户能够使用索引(元素在List中的位置,类似于数组下标)来访问List中的元素,这类似于Java的数组。和下面要提到的Set不同,List允许有相同的元素。除了具有Collection接口必备的iterator。方法外,List还提供一个listlterator。方法,返回一个Listiterator接口,和标准的Iterator接口相比,Listiterator多了一些add()之类的方法,允许添加,删除,设定元素,还能向前或向后遍历。实现List接口的常用类有LinkedList,ArrayList,Vector和StackoLinkedList类LinkedList实现了List接口,允许null元素。此外LinkedList提供额外的get,remove,insert方法在LinkedList的首部或尾部。这些操作使LinkedList可被用作堆栈(stack),队列(queue)或双向队列(deque)o注意LinkedList没有同步方法。如果多个线程同时访问一个List,则必须自己实现访问同步。一种解决方法是在创建List时构造一个同步的List:Listlist=Collections.synchronizedList(newLinkedList(...));ArrayList类ArrayList实现了可变大小的数组。它允许所有元素,包括null。ArrayList没有同步。size,isEmpty,get,set方法运行时间为常数。但是add方法开销为分摊的常数,添加n个元素需要0(n)的时间。其他的方法运行时间为线性每个ArrayList实例都有一个容量(Capacity),即用于存储元素的数组的大小。这个容量可随着不断添加新元素而自动增加,但是增长算法并没有定义。当需要插入大量元素时,在插入前可以调用ensureC叩acity方法来增加ArrayList的容量以提高插入效率。和LinkedList一样,ArrayList也是非同步的(unsynchronized)。Vector类Vector非常类似ArrayList,但是Vector是同步的。由Vector创建的Iterator,虽然和ArrayList创建的Iterator是同一接口,但是,因为Vector是同步的,当一个Iterator被创建而且正在被使用,另一个线程改变了Vector的状态(例如,添加或删除了一些元素),这时调用Iterator的方法时将抛出ConcurrentModificationException,因此必须捕获该异常。Stack类Stack继承自Vector,实现一个后进先出的堆栈。Stack提供5个额外的方法使得Vector得以被当作堆栈使用。基本的push和pop方法,还有peek方法得到栈顶的元素,empty方法测试堆栈是否为空,search方法检测一个元素在堆栈中的位置。Stack刚创建后是空栈。Set接口Set是一种不包含重复的元素的Collection,即任意的两个元素el和e2都有el.equals(e2)=false,Set最多有一个null元素。很明显,Set的构造函数有一个约束条件,传入的Collection参数不能包含重复的元素。请注意:必须小心操作可变对象(MutableObject)。如果一个Set中的可变元素改变了自身状态导致Object.equals(Object)=true将导致一些问题。Map接口请注意,Map没有继承Collection接口,Map提供key到value的映射。一个Map中不能包含相同的key,每个key只能映射一个valueoM叩接口提供3种集合的视图,Map的内容可以被当作一组key集合,一组value集合,或者一组key-value映射。Hashtable类Hashtable继承Map接口,实现一个key-value映射的哈希表。任何非空(non-null)的对象都可作为key或者value。添加数据使用put(key,value),取出数据使用get(key),这两个基本操作的时间开销为常数。Hashtable通过initialcapacity和loadfactor两个参数调整性能。通常缺省的loadfactor0.75较好地实现了时间和空间的均衡。增大loadfactor可以节省空间但相应的查找时间将增大,这会影响像get和put这样的操作。使用Hashtable的简单示例如下,将1,2,3放到Hashtable中,他们的key分别是“one","two“,“three”:Hashtablenumbers=newHashtable();numbers.put(“one”,newInteger(l));numbers.put(“two”,newTnteger(2));numbers.put("three”,newInteger(3));要取出一个数,比如2,用相应的key:Integern=(Integer)numbers.get(“two”);System.out.println(utwo="+n);由于作为key的对象将通过计算其散列函数来确定与之对应的value的位置,因此任何作为key的对象都必须实现hashCode和equals方法。hashCode和equals方法继承自根类Object,如果你用自定义的类当作key的话,要相当小心,按照散列函数的定义,如果两个对象相同,即obj1.equals(obj2)=true,则它们的hashCode必须相同,但如果两个对象不同,则它们的hashCode不一定不同,如果两个不同对象的hashCode相同,这种现象称为冲突,冲突会导致操作哈希表的时间开销增大,所以尽量定义好的hashCode。方法,能加快哈希表的操作。如果相同的对象有不同的hashCode,对哈希表的操作会出现意想不到的结果(期待的get方法返回null),要避免这种问题,只需要牢记一条:要同时复写equals方法和hashCode方法,而不要只写其中一个。Hashtable是同步的。HashMap类HashMap和Hashtable类似,不同之处在于HashMap是非同步的,并且允许null,即nullvalue和nullkey。,但是将HashMap视为Collection时(values。方法可返回Collection),其迭代子操作时间开销和HashMap的容量成比例。因此,如果迭代操作的性能相当重要的话,不要将HashMap的初始化容量设得过高,或者loadfactor过低。WeakHashMap类WeakHashMap是一种改进的HashMap,它对key实行“弱引用”,如果一个key不再被外部所引用,那么该key可以被
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 重庆人文科技学院《体育概论》2022-2023学年第一学期期末试卷
- 重庆人文科技学院《急救护理学》2021-2022学年第一学期期末试卷
- 重庆人文科技学院《场地设计》2021-2022学年第一学期期末试卷
- 2024北京房山九年级(上)期中英语(教师版)
- 重庆三峡学院《风景园林工程与管理实践》2023-2024学年第一学期期末试卷
- 2021年信息系统管理工程师(中级)考试题库
- 重庆人文科技学院《数据库实验》2021-2022学年期末试卷
- 重庆人文科技学院《企业内部控制与设计》2023-2024学年期末试卷
- 重庆人文科技学院《教育学基础》2021-2022学年第一学期期末试卷
- 重庆人文科技学院《家庭教育理论与实务》2022-2023学年第一学期期末试卷
- 梅岭三章导学案
- 登杆培训材料
- 手术室护理风险防范措施
- 2024年安全员之C证(专职安全员)通关提分题库及完整答案
- 山东省处置生物恐怖袭击事件应急预案
- 施工图交付进度计划报审表
- 英文格子纸A4word下载
- 员工私家车团购方案
- QC七大手法九大步骤八大原则资料演示文稿
- GB/T 3286.1-1998石灰石、白云石化学分析方法氧化钙量和氧化镁量的测定
- GB 5606.6-2005卷烟第6部分:质量综合判定
评论
0/150
提交评论