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,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" 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. Android UI组件----自定义ListView实现动态刷新

    [声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/3 ...

  2. Enum,Int,String的互相转换

    Enum为枚举提供基类,其基础类型可以是除 Char 外的任何整型.如果没有显式声明基础类型,则使用Int32.编程语言通常提供语法来声明由一组已命名的常数和它们的值组成的枚举. 注意:枚举类型的基类 ...

  3. js滚轮事件

    首先,不同的浏览器有不同的滚轮事件.主要是有两种,onmousewheel(firefox不支持)和DOMMouseScroll(只有firefox支持).w3c文档已经废弃了onmousewheel ...

  4. Windows 7系统启动MongoDB失败解决办法?

    问题现象: 1.在配置Python环境安装MongoDB时发现在“服务”里面手动启动失败,报错如下: 2.在cmd里面也无法启动,注意这里要以管理员身份启动cmd哦 问题解决: 1.需要先在bin下执 ...

  5. sql建JOB语句

    declare job_id pls_integer; begin sys.dbms_job.submit(job => job_id, what => 'proc_AGTAWBSTATI ...

  6. iOS设计模式 - 生成器

    iOS设计模式 - 生成器 原理图 说明 1. 将构建复杂对象的过程拆分成一个一个的模块,通过统一的指导者来指导对象的构建过程称之为生成器模式 2. 生成器模式适合用于构建组合的对象 源码 https ...

  7. [翻译] INSSearchBar

    INSSearchBar 效果: An animating search bar. 一个带动画效果的search bar. Originally developed for ShopNow v2. ( ...

  8. September 26th 2017 Week 39th Tuesday

    I have to protect the one thing I can't live without. 我必须为我一生挚爱遮风挡雨. A man is a success if he gets u ...

  9. November 6th 2016 Week 46th Sunday

    The starting point of all achievements is desire. 成功的第一步是渴望. Those who make great achievements are o ...

  10. virtualbox+vagrant学习-4-Vagrantfile-1-简介

    Vagrantfile Vagrantfile的主要功能是描述项目所需的机器类型,以及如何配置和提供这些机器.之所以称为Vagrantfiles,是因为文件的实际文本文件名是Vagrantfile(除 ...