version 必须配置在id后面

缓存文件在映射文件后面

一级缓存:session回话级别

Session缓存的作用

(1)减少访问数据库的频率。应用程序从内存中读取持久化对象的速度显然比到数据库中查询数据的速度快多了,因此Session的缓存可以提高数据访问的性能。

(2)保证缓存中的对象与数据库中的相关记录保持同步。当缓存中持久化对象的状态发生了变化,Session并不会立即执行相关的SQL语句,这使得Session能够把几条相关的SQL语句合并为一条SQL语句,以便减少访问数据库的次数,从而提高应用程序的性能。


Session的清理缓存

清理缓存是指按照缓存中对象的状态的变化来同步更新数据库,下面我们还是具体来看一段代码:以下程序代码对Customer的name属性修改了两次:

tx = session.beginTransaction();
Customer customer=(Customer)session.load(Customer.class,
new Long(1));
customer.setName("Jack");
customer.setName("Mike");
tx.commit();

当Session清理缓存时,只需执行一条update语句:

update CUSTOMERS set NAME= ‘Mike’…… where ID=1;

其实第一次调用setName是无意义的,完全可以省略掉。

Session缓存在什么时候才清理呢?我们来看一下:

Session会在下面的时间点清理缓存:

1. 当应用程序调用org.hibernate.Transaction的commit()方法的时候,commit()方法先清理缓存,然后再向数据库提交事务。

2. 当应用程序显式调用Session的flush()方法的时候,其实这个方法我们几乎很少用到,因为我们一般都是在完成一个事务才去清理缓存,提交数据更改,这样我们直接提交事务就可以。

二级缓存:sessionFactory工厂级别

二级缓存插件EHCache的 jar 包及配置文件

aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAQIAAABGCAIAAACokw3JAAAI4klEQVR4nO1c32/TVhT2H7C3ve154h+oVE2W9s4bL2iAVoYqIcMD2gOwSaUUhYqRZVqRJTp4qGAr1QZiVVsk6k1FVUVFxronKihKcZofJKmT4ECkNJvWdfIenNjXvuf6R+KkznI+HVWpc++5x8757j128l1OQyD6Htx+B4BA7D+QBggE0gCBAGmQyJYePHn+/eLvrvbgyfNEttT9oBGIYAHQYP7xs41XqXq9/heFnZ0d43W9Xt94lZp//Kz7QSMQwQKgwY3ZlUqlsre39y+Bvb29nZ2d6uaT3d1d40ilUrkxu9L1mBGIgAHQQLy7pKrqPwR2d3drtVrl0bfqtY/q9bpxXFVV8e6Sh1EkgeNFOaiYg/UWesgi31fnux8AaBCbXiyVSn8TqFar5V9jb7468O7duzfrS/V6XT9eKpVi04seRukPGkgC14BDeJIAv210FiTbO0iDzgOgwfjUvKIofzZRq9WKy5OlSx8oilJ8OF6+cqBWq+lvKYoyPjXvYZR+oIEkGEFJApDNmqbpKQ3QQBb5Rnt2V0QHAdBgdPJePp+vNVGtVksX3tf/6i+q1ar+Vj6fH52852GUfqABCUaEssjzougcffhP7v8IgAbnJ+5ks9lqE6qqlr4ZyGazxS/eU1VVVdVcLre9vf327dtsNnt+4g7lgC4OJIHjRZFe9qmW+mxpLw5szTx7AwDGxlFjyiLPCZIkmO08VTzEIPSUrvt0yXPg3UY/47UtVjpUhG8ANDgTnUqlUpVKpVQqbW1tbW1tpVKp/PiHmYVIKpXK5XJfij/Gbs+9fv06mUyeiU5Ze5Ofo/EBSoLxuZmVLl0ly6JA1xV0M5Y3elwbYFfmEXNQPd0MH16cmyfBQyQwXMA0aOY34NkcELw+tlARrQCgwcnIZDKZLJfL29vbxy5MHh+7efrqrU9Hvzt2YfL01VtTs0v68a9vzycSiZORSUtncm61zd9mGlHHCNjnO6AZwxs8LiMK2lNzcEHS7LnuxbkZPOMG2LIy+rmDtsZCrQdutER4AECD4yPXNjc3FUXJ5XK5XO6X1T+k1TVpdW1h+beF5acJeSuRSJy4dDN2e35jY+P4yDVLZ/hD9kYDMonIhcQjDVxLAk800P+naOCh3nC7MQaY5ClKCzep64M0CAIADT45G3358mU+n8/n85lM5tSVqaMj14+NXD86cv3UlalMJvPZ2I3orblMJvPixYtPzkatvS3JIAlGYUMlrqWlJIoy2YqoLKhm7t6McW0AXVmLIirL2CdlBZiN0LNO6yC8KJMPioge5LvUjEBcH6RBAABocOjMZVmWFUVJp9PJZHITQqFQUBRFluVDZy7b+wO3cWDiki3JMpfjOI4XBOi+0IFUrNtrVmxk3c9R/ajccnVOFU6C5JkGzFtfKw3g64M0CAAADQ4KF9PpdLFY/PnR0+gPDz+f+Im2crmsqmo6nT4oXOx+0P0FzPPOA6DBkfPR+wuLxWJRcUS5XL6/sHjkfJT2gAgQ+CVyFwDQYGE5fnJs4uOhs652cmxiYTne/aD7BY1CC5eCjgNlNwgE0gCBQBogEBrSAIHQkAYIhIaSfARCQ0k+AqGhJB+B0DogyYd+jWn9vViPfBvUb4q51r6vlgTb59mbX3oHLslHGnTIG0PL3/o+ANaff/OijDQg0Z4k3/nz7g4NAhklXDRgaPnb3AcgkKvUI9OaIwKX5CMNOuDNi5bf9z4ASAMTgUvyIb28XSplLuRs3b21Md9U5TQ924SPhDfih/8+1PRh3kbAk5bf/z4AoKaCUHS4X2qNURT13gYCnZDkU3p5u3CEuIawkoYQHdr0MXYlPlOlzlD8sKT6od1GwE3Lb/b2uw+A5d6AF2UrDTxeagca9NIGAkFL8kFpGFM42/wX1rzTSkhIdOasUvco1YfbhGsbARYNWt0HwG018HSpHVeD3tlAIGhJfss0AD5HDzRwVam3JtVnDdftbQTctfxt7APgkwbwpWbToKc2EOiEJN+FBtbSkdbdG5p3DzRwV6n7leqHbRsB6MoC1SYBrwJonzRgnqmR9NaQemoDgcAl+R5WAwG6Q2beTjl6JrqRKv7GUXsTL1L98G0jQJ+/kXNt7QPgtygCz5RNA7h979AAJfmI1hHSPHcBSvIRQQJainoAKMlHBIRe3kAAZTcIBNIAgUAaIBCaQYNCDQ2tfw1pgIYG0WDtVWl21ZMkf3b1+dqr0r6fAxpamwbQ4P6KD0n+/ZVn+34OaGhtGkADv5L8fT8HNLQ2DaCBX0m+2xjSECfMNF7LkUGO47ihOajlujjA8ZH19k4pECchHxEtaANo4FeS7zaGSYN4jOeGJepdbiAmF2rdoQExHG1z5m/+Zrz3RRr0vgE08CvJdxvDpMHMsD2N4jGec8jLIE1fiIQhKoaGzQncoBhvrS9ajxtAA7+SfLcx2DRYFwcGxUh3c4umYqGmFWpyZNB9Rmf0Ret5A2jgV5Jv86hP8ERp0aDBzDBnPS5HBrmhOSK31sUBuBrR32qgeV+hd5eGbMcdnNS0AiuVm4TUwcp1Zl9jROc4masN2j4bQAO/knyLRyAL4dXAeO2BBnJkuJlAcwLJIrOIN463RoM5wUokeGVwo4GHONFCaQAN/EryrR716ZlMI4gGRCEO0cCY400/1CLTWEyaozT/dXRScKABMVWzih/31cA9TrQwGkADv5J8yK8+Ber5R9Og8djUgkExzprI18UBjqaKKw1gcyiK4s5tXGngKU60MBpAA7+SfIvHdTFiqYk15ydFBS9FETFVx2O8pdhoPn41j/uigVn/yJFB6rktVR3BfY0R2XEiDUJuAA38SvJtHs1b4UaOtk0DYvUYGBYss+ww9aS/RRpoRBHFvElwoYFDnEiDcBtAA7+S/MCicctgq4UmvfyFjRZGA2hw+JwPSf7hc9GgQonHeD+PFMNCA59ho4XRABpMS/ETo54k+SdGJ6aleABxNH7F4GtODQENWgkbLYyGshs0NKQBGhrSAA2tgDRAQyvUcIMWBAL3KUIgNKQBAqEhDRAITdP+A8yA0Nt8layzAAAAAElFTkSuQmCC" alt="" />

在hibernate.cfg.xml文件中进行配置

<!-- 配置启用 hibernate 的二级缓存 -->
<property name="cache.use_second_level_cache">true</property>
<!-- 配置hibernate二级缓存使用的产品 -->
<property name="hibernate.cache.region.factory_class">org.hibernate.cache.ehcache.EhCacheRegionFactory</property>
<!-- 配置对哪些类使用 hibernate 的二级缓存 -->
<class-cache usage="read-write" class="com.atguigu.hibernate.entities.Employee"/>

集合级别的二级缓存的配置

<collection-cache usage="read-write" collection="com.atguigu.hibernate.entities.Department.emps"/>
<!-- 也可以在 .hbm.xml 文件中进行配置 -->
<set name="emps" table="GG_EMPLOYEE" inverse="true" lazy="true">
<cache usage="read-write"/>
<key>
<column name="DEPT_ID" />
</key>
<one-to-many class="com.atguigu.hibernate.entities.Employee" />
</set>
<!-- 注意: 还需要配置集合中的元素对应的持久化类也使用二级缓存! 否则将会多出 n 条 SQL 语句. -->
<class-cache usage="read-write" class="com.atguigu.hibernate.entities.Employee"/>

二级缓存的清除

1:调用evict()方法;

2:关闭SessionFacotry;

JavaEE笔记(五)的更多相关文章

  1. C#可扩展编程之MEF学习笔记(五):MEF高级进阶

    好久没有写博客了,今天抽空继续写MEF系列的文章.有园友提出这种系列的文章要做个目录,看起来方便,所以就抽空做了一个,放到每篇文章的最后. 前面四篇讲了MEF的基础知识,学完了前四篇,MEF中比较常用 ...

  2. 《MFC游戏开发》笔记五 定时器和简单动画

    本系列文章由七十一雾央编写,转载请注明出处. http://blog.csdn.net/u011371356/article/details/9332377 作者:七十一雾央 新浪微博:http:// ...

  3. (转)Qt Model/View 学习笔记 (五)——View 类

    Qt Model/View 学习笔记 (五) View 类 概念 在model/view架构中,view从model中获得数据项然后显示给用户.数据显示的方式不必与model提供的表示方式相同,可以与 ...

  4. java之jvm学习笔记五(实践写自己的类装载器)

    java之jvm学习笔记五(实践写自己的类装载器) 课程源码:http://download.csdn.net/detail/yfqnihao/4866501 前面第三和第四节我们一直在强调一句话,类 ...

  5. Crazyflie笔记五: CRTP 实时通信协议(一)(转)

    源:Crazyflie笔记五: CRTP 实时通信协议(一) 这里详细介绍了 Crazyflie 的 CRTP实时通信协议的相关内容,由于内容很长,分几篇博文来讲述.这里是第一节内容.欢迎交流:301 ...

  6. Learning ROS for Robotics Programming Second Edition学习笔记(五) indigo computer vision

    中文译著已经出版,详情请参考:http://blog.csdn.net/ZhangRelay/article/category/6506865 Learning ROS for Robotics Pr ...

  7. Typescript 学习笔记五:类

    中文网:https://www.tslang.cn/ 官网:http://www.typescriptlang.org/ 目录: Typescript 学习笔记一:介绍.安装.编译 Typescrip ...

  8. Django开发笔记五

    Django开发笔记一 Django开发笔记二 Django开发笔记三 Django开发笔记四 Django开发笔记五 Django开发笔记六 1.页面继承 定义base.html: <!DOC ...

  9. ES6学习笔记<五> Module的操作——import、export、as

    import export 这两个家伙对应的就是es6自己的 module功能. 我们之前写的Javascript一直都没有模块化的体系,无法将一个庞大的js工程拆分成一个个功能相对独立但相互依赖的小 ...

  10. muduo网络库学习笔记(五) 链接器Connector与监听器Acceptor

    目录 muduo网络库学习笔记(五) 链接器Connector与监听器Acceptor Connector 系统函数connect 处理非阻塞connect的步骤: Connetor时序图 Accep ...

随机推荐

  1. 【转】stropts.h: No such file or directory – How to Fix

    原文地址:stropts.h: No such file or directory – How to Fix 作者:xjc2694 It is a known issue that modern Li ...

  2. SQL Server FOR XML PATH 和 STUFF函数的用法

    FOR XML PATH ,其实它就是将查询结果集以XML形式展现,将多行的结果,展示在同一行. 下面我们来写一个例子: 假设我们有个工作流程表: CREATE TABLE [dbo].[Workfl ...

  3. JBoss服务器优化

    JBOSS参数调优 配置deploy/jboss-web.deployer/server.xml文件 . <Connector port="8080" address=&qu ...

  4. Java 使用stringTemplate导出大批量数据excel(百万级)

    目前java框架中能够生成excel文件的的确不少,但是,能够生成大数据量的excel框架,我倒是没发现,一般数据量大了都会出现内存溢出,所以,生成大数据量的excel文件要返璞归真,用java的基础 ...

  5. 使用YXHUD

    使用YXHUD 这是本人自己设计的一个类,但功能很不完善,先看看效果: 源码: YXHUD.h 与 YXHUD.m // // YXHUD.h // UILabel // // Created by ...

  6. Windows:删除图标缓存

    适用于桌面快捷方式图标丢失或图标变成白色的情况,批处理代码如下: rem 关闭explorer.exe taskkill /f /im explorer.exe attrib -h -i %userp ...

  7. CSS学习摘要-浮动与清除浮动

    以下从浮动到BFC的段落 摘自MDN 网络开发者 float 浮动 float CSS属性指定一个元素应沿其容器的左侧或右侧放置,允许文本和内联元素环绕它.该元素从网页的正常流动中移除,尽管仍然保持部 ...

  8. int to string & string to int

    #include "stdafx.h" #include <string> #include <sstream> using namespace std; ...

  9. 关于markdown格式的测试..

    标题 标题一 这是? 标题二 标题三 标题四 区块 1.这是一个列表项目 还是吗? 嵌套了? 空格了? 区块加列表 标题加二级列表 嘿嘿 无序列表 RED GREEN BLUE 有序列表 dog ca ...

  10. 026.2 网络编程 UDP聊天

    实现,通过socket对象 ##############################################################需求建立UDP发送端:###思路:1.建立可以实 ...