JavaEE笔记(五)
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笔记(五)的更多相关文章
- C#可扩展编程之MEF学习笔记(五):MEF高级进阶
好久没有写博客了,今天抽空继续写MEF系列的文章.有园友提出这种系列的文章要做个目录,看起来方便,所以就抽空做了一个,放到每篇文章的最后. 前面四篇讲了MEF的基础知识,学完了前四篇,MEF中比较常用 ...
- 《MFC游戏开发》笔记五 定时器和简单动画
本系列文章由七十一雾央编写,转载请注明出处. http://blog.csdn.net/u011371356/article/details/9332377 作者:七十一雾央 新浪微博:http:// ...
- (转)Qt Model/View 学习笔记 (五)——View 类
Qt Model/View 学习笔记 (五) View 类 概念 在model/view架构中,view从model中获得数据项然后显示给用户.数据显示的方式不必与model提供的表示方式相同,可以与 ...
- java之jvm学习笔记五(实践写自己的类装载器)
java之jvm学习笔记五(实践写自己的类装载器) 课程源码:http://download.csdn.net/detail/yfqnihao/4866501 前面第三和第四节我们一直在强调一句话,类 ...
- Crazyflie笔记五: CRTP 实时通信协议(一)(转)
源:Crazyflie笔记五: CRTP 实时通信协议(一) 这里详细介绍了 Crazyflie 的 CRTP实时通信协议的相关内容,由于内容很长,分几篇博文来讲述.这里是第一节内容.欢迎交流:301 ...
- Learning ROS for Robotics Programming Second Edition学习笔记(五) indigo computer vision
中文译著已经出版,详情请参考:http://blog.csdn.net/ZhangRelay/article/category/6506865 Learning ROS for Robotics Pr ...
- Typescript 学习笔记五:类
中文网:https://www.tslang.cn/ 官网:http://www.typescriptlang.org/ 目录: Typescript 学习笔记一:介绍.安装.编译 Typescrip ...
- Django开发笔记五
Django开发笔记一 Django开发笔记二 Django开发笔记三 Django开发笔记四 Django开发笔记五 Django开发笔记六 1.页面继承 定义base.html: <!DOC ...
- ES6学习笔记<五> Module的操作——import、export、as
import export 这两个家伙对应的就是es6自己的 module功能. 我们之前写的Javascript一直都没有模块化的体系,无法将一个庞大的js工程拆分成一个个功能相对独立但相互依赖的小 ...
- muduo网络库学习笔记(五) 链接器Connector与监听器Acceptor
目录 muduo网络库学习笔记(五) 链接器Connector与监听器Acceptor Connector 系统函数connect 处理非阻塞connect的步骤: Connetor时序图 Accep ...
随机推荐
- 混淆矩阵(Confusion matrix)的原理及使用(scikit-learn 和 tensorflow)
原理 在机器学习中, 混淆矩阵是一个误差矩阵, 常用来可视化地评估监督学习算法的性能. 混淆矩阵大小为 (n_classes, n_classes) 的方阵, 其中 n_classes 表示类的数量. ...
- socat 的神奇使用方式
目的是实现科* 学 * 上*网,现在记录一下流程 先在服务器上安装(比如美国,香港,台湾,马来的云主机)squid,easy_rsa, centos 下可以用yum直接安装 $ yum install ...
- Management Studio 插件生成安装包要点(以ProjkyAddin为例)
通过Visual Studio向导生成Management 插件框架就不说了,网上能搜到不少资料.本篇重点是说明怎么设计一个插件安装包,适用于Management Studio 2005 到2014的 ...
- linux 局域网探测工具nmap
NMap,也就是Network Mapper,是Linux下的网络扫描和嗅探工 具包,其基本功能有三个, 一是探测一组主机是否在线: 其次是扫描主机端口,嗅探所提供的网络服务: 还可以推断主机所用的操 ...
- 【转】数据分析与处理之二(Leveldb 实现原理)
郑重声明:本篇博客是自己学习 Leveldb 实现原理时参考了郎格科技系列博客整理的,原文地址:http://www.samecity.com/blog/Index.asp?SortID=12,只是为 ...
- C语言的参数传递
一.三道考题 开讲之前,我先请你做三道题目.(嘿嘿,得先把你的头脑搞昏才行……唉呀,谁扔我鸡蛋?) 考题一,程序代码如下:void Exchg1(int x, int y){ int tmp; ...
- extjs 可视化开发工具
不清楚Ext可视化的可以看一下http://www.screencast.com/users/JackSlocum这里的三个视频哈. 安装和汉化的步骤 第一步下载:Ext需要支持AIR的支持 下载并安 ...
- [翻译] AAPullToRefresh
AAPullToRefresh 效果: Requirement - 需要的环境 ARC. iOS 6 or higher(tested on iOS 6, 7 and 8). Install - 安装 ...
- 一个好玩的计算题目(c++ 位运算)
2015/11/10 在一个qq群里面,看到一个好玩的题目.“int foo(int x){return x&-x} foo(2^31-3)这个怎么算 ?” 1.自己也就开始算了: (1) ...
- 在虚拟机里安装linux(centos 6.5)系统
菜鸟一枚,也是接触linux系统没多长时间,前一阵子网上说有一个高级数据库工程师,因为rm -rf / 命令干掉了数据库-(nb),居然还跑路了!厉害了我的哥!也是闲的我蛋疼,在虚拟机里试了一批,本来 ...