hibernate缓存文件的学习培训,hibernate缓存文件学习培训
这篇blog将学习培训hibernate的缓存文件对策,缓存文件是hibernate提升特性的关键方式。
在hibernate中缓存文件关键分成:session的缓存文件,sessionFactory的缓存文件,在其中,sessionFactory缓存文件又分成:内嵌缓存文件和外接缓存文件,有关缓存文件有一下几个方面必须表明:
1.session的缓存文件和sessionFactory的内嵌缓存文件,全是内嵌的,变成hibernate的一级缓存文件。
2.sessionFactory的内嵌缓存文件中包括了投射数据库的预订义sql。
3.sessionFactory的外接缓存文件是一个能够配备的软件。默认设置不是打开的,必须大家手动式配备,外接缓存文件的数据信息是数据信息库数据信息的复制,外接缓存文件的储放地区能够是运行内存或是电脑硬盘。
UserInfo userInfo = (UserInfo) session.get(UserInfo.class,10); System.out.println(userInfo.getUserName()); System.out.println(userInfo.getUserName()); System.out.println(userInfo.getUserName()); System.out.println(userInfo.getUserName()); System.out.println(userInfo.getUserName());
目标,随后持续四次获得该目标的username特性,sql句子复印以下:
能够发觉仅有hibernate只传出了一条sql查寻句子。
2.load方式检测
假如大家将上边根据get方式获得的实体线类目标,改成load方式来载入,一样的,hibernate会只传出一条查寻句子。
3.list方式检测
这时hibernate一样只传出一条sql句子。
能够发觉,最先查寻全部数据信息,随后将其缓存文件到session中,再度查寻的情况下,不用在从数据信息库之中查寻。
这儿我仅仅在查寻进行全部数据信息之后,提升了一条关掉session的句子。这时当再度load方式查寻的情况下,又会再次传出一条sql句子。这充足表明查寻出的数据信息是缓存文件到session之中的。
这儿我2次根据list方式查寻数据信息。hibernate传出的sql以下:
能看出。list只有给缓存文件中储放数据信息,可是再度查寻的情况下還是会传出sql查寻全部的句子。
刚刚讲过,list是只有给缓存文件中储放数据信息,可是却不可以从缓存文件之中取数据信息。iterator是能够的,那麼iterator是如何保证的呢??看看面的编码:
String hql = "from UserInfo"; Iterator UserInfo itertor = session.createQuery(hql).iterate(); while (itertor.hasNext()) { System.out.println(itertor.next().getUserName()); Iterator UserInfo itertor2 = session.createQuery(hql).iterate(); while (itertor2.hasNext()) { System.out.println(itertor2.next().getUserName()); }
这儿2次根据iterator查寻全部的数据信息,这时hibernate传出的sql句子以下图:
大家如今早已了解了,list是能够给缓存文件之中储放数据信息的,但是不能以从缓存文件之中取数据信息,list查寻只传出一条sql查寻全部的句子就可以,而iterator是能够从缓存文件之中载入数据信息的,假如应用iterator查寻全部数据信息,会最先查寻全部的id,随后依据id一次传出sql句子,查寻每一条纪录,那样无形中之中就减少了查寻高效率,那麼大家能够依据这种特点,将list查寻和iterator查寻融合起來应用。
大家能够最先应用list查寻全部,那样总是传出一条查寻句子,无须想iterator那般传出n+1条sql句子,提高了查寻高效率,第一其次后查寻全部数据信息的情况下,便可以立即应用iterator来查寻,那样能够只查寻全部的id,随后依据id从缓存文件之中取数据信息,编码以下:
String hql = "from UserInfo"; List UserInfo lists = session.createQuery(hql).list(); for (UserInfo userInfo : lists) { System.out.println(userInfo.getUserName()); Iterator UserInfo itertor = session.createQuery(hql).iterate(); while (itertor.hasNext()) { System.out.println(itertor.next().getUserName()); }
这时hibernate传出的sql与我们预估的一样:
在hibernate中,二级缓存文件默认设置是开启的,一般来说,hibernate的二级缓存文件是和运用的性命周期时间是一样的,因为二级缓存文件的数据信息每个session都可以以开展浏览和变更,因此假如出現分布式系统的情况下,有将会会出現难题。
1.加上ecache需要的jar文档:
在hibernate-release-4.3.10.Final\lib\optional\ehcache文件目录下有那样三个jar文档,必须添加到工程项目中:
slf4j-api-1.6.1.jar
hibernate-ehcache-4.3.10.Final.jar
ehcache-core-2.4.3.jar
2.配备二级缓存文件:
在hibernate.cfg.xml文档中开展配备:
!-- 配备缓存文件出示类 -- property name="cache.provider_class" org.hibernate.cache.EhCacheProvider /property !-- 开启查寻缓存文件 -- property name="cache.use_query_cache" true /property
说白了查寻缓存文件便是让hibernate缓存文件list,iterator,createQuery等方式的查寻結果集,假如沒有开启查寻缓存文件,hibernate将只缓存文件load方式得到的单独长久化目标。
留意:在开启查寻缓存文件 以后,启用query.list()以前,务必显示信息启用query.setCacheable(true)来标志该查寻应用缓存文件。
3.创建ehcache.xml,在类相对路径下:
?xml version="1.0" encoding="UTF-8"? ehcache diskStore path="java.io.tmpdir"/ defaultCache maxElementsInMemory="10000" eternal="false" timeToIdleSeconds="120" timeToLiveSeconds="120" overflowToDisk="true" maxElementsOnDisk="" diskPersistent="false" diskExpiryThreadIntervalSeconds="120" memoryStoreEvictionPolicy="LRU" /ehcache
表明一下:
diskStore表明设定cache文档的储放文件目录,有以下三种配备:
1.user.home 表明客户的主文件目录
2.user.home 表明客户当今的工作中文件目录
3.java.io.tmpdir 默认设置的temp文档文件目录
maxElementsInMemory :以内存中较大的目标缓存文件总数
eternal :设定是不是为永久性缓存文件,假如是永久性缓存文件,则timeout将被忽视。
可选择的特性:
timeToIdleSeconds:表明设定原素到期前的空余時间
timeToLiveSeconds:表明设定原素到期前的主题活动時间
diskPersistent:表明是不是disk store在虚似机起动时长久化。默认设置为false
diskExpiryThreadIntervalSeconds:表明运作disk结束进程的時间,默认设置为120秒
memoryStoreEvictionPolicy:表明对策有关Eviction
4.配备投射文档
在必须被缓存文件的类相匹配的投射文档中配备hibernate的缓存文件对策
这儿我配备的缓存文件对策是可读写能力的。该配备有以下一些值:
1.read-only :表明不用改动的数据信息。
2.read-write :必须升级数据信息
3.nonstrict-read-write 非严苛读写能力缓存文件对策。只必须有时候升级数据信息,而且都不必须十分严苛的事情防护。
5.撰写检测编码:
这儿,尽管第一次查寻进行后session就早已关掉,可是因为配备了二级缓存文件,因此当session2再度查寻的情况下,不是必须再传出sql句子从数据信息库之中查寻的。
有关hibernate的缓存文件的学习培训就到这儿了。
dengb.TechArticlehibernate缓存文件的学习培训,hibernate缓存文件学习培训 这篇blog将学习培训hibernate的缓存文件对策,缓存文件是hibernate提升特性的关键方式。 在hibernate中缓存文件关键分成:...