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 包及配置文件
在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;
转载于:https://www.cnblogs.com/HackerBlog/p/6102706.html
JavaEE笔记(五)相关推荐
- python函数是一段具有特定功能的语句组_Python学习笔记(五)函数和代码复用
本文将为您描述Python学习笔记(五)函数和代码复用,具体完成步骤: 函数能提高应用的模块性,和代码的重复利用率.在很多高级语言中,都可以使用函数实现多种功能.在之前的学习中,相信你已经知道Pyth ...
- Ethernet/IP 学习笔记五
Ethernet/IP 学习笔记五 Accessing data within a device using a non-time critical message (an explicit mess ...
- StackExchange.Redis学习笔记(五) 发布和订阅
StackExchange.Redis学习笔记(五) 发布和订阅 原文:StackExchange.Redis学习笔记(五) 发布和订阅 Redis命令中的Pub/Sub Redis在 2.0之后的版 ...
- 吴恩达《机器学习》学习笔记五——逻辑回归
吴恩达<机器学习>学习笔记五--逻辑回归 一. 分类(classification) 1.定义 2.阈值 二. 逻辑(logistic)回归假设函数 1.假设的表达式 2.假设表达式的意义 ...
- 好程序员教程分析Vue学习笔记五
好程序员教程分析Vue学习笔记五,上次我们学习了Vue的组件,这次我们来学习一下路由的使用.在Vue中,所谓的路由其实跟其他的框架中的路由的概念差不多,即指跳转的路径. 注意:在Vue中,要使用路由, ...
- 【AngularJs学习笔记五】AngularJS从构建项目开始
为什么80%的码农都做不了架构师?>>> #0 系列目录# AngularJs学习笔记 [AngularJs学习笔记一]Bower解决js的依赖管理 [AngularJs学习笔 ...
- ROS学习笔记五:理解ROS topics
ROS学习笔记五:理解ROS topics 本节主要介绍ROS topics并且使用rostopic和rqt_plot命令行工具. 例子展示 roscore 首先运行roscore系列服务,这是使用R ...
- 《MFC游戏开发》笔记五 定时器和简单动画
本系列文章由七十一雾央编写,转载请注明出处. http://blog.csdn.net/u011371356/article/details/9332377 作者:七十一雾央 新浪微博:http:// ...
- STM32复习笔记(五) —— GPIO锁定机制
STM32复习笔记(五) -- GPIO锁定机制 1.GPIO 锁定机制 锁定机制可以锁定 IO 口的配置,锁定一个端口位之后,直至下一次复位之前,将不能再更改端口位的配置 2.本例程软件设计思路 1 ...
- Spring Boot 框架学习笔记(五)( SpringSecurity安全框架 )
Spring Boot 框架学习笔记(五) SpringSecurity安全框架 概述 作用 开发示例: 1. 新建项目 2. 引入依赖 3. 编写`SecurityConfig`类,实现认证,授权, ...
最新文章
- 学校SOLARIS ORACLE很好的电子教材
- KindEditor ASP.NET 上传/浏览服务器 附源码
- python爬虫入门-Python 爬虫从入门到进阶之路(一)
- 命令行神器 Click 简明笔记
- Python进阶10-标准库介绍01
- 热血沙城-3.2移植-古月-cocos2dx源码
- 2015年创业中遇到的技术问题:21-30
- 当前局域网禁止BT下载的常用工具及其弊端。
- kafka 0.8.2版本配置选项翻译
- 2020年百度之星程序设计大赛-初赛二(Poker、Distance)
- VC编程读取文本数据
- Vue中动态绑定自定义快捷键
- python如何绘制曲线图_Python matplotlib 如何绘制双Y轴曲线图?
- 读书感受 之 《写给年轻人的 经济学故事书》
- 腾讯图像超分辨率算法RealSR,开源了
- Android 相机开发
- 数据库SQL实战11_获取员工其当前的薪水比其manager当前薪水还高的相关信息,当前表示to_date=‘9999-01-01‘, 结果第一列给出员工的emp_no, 第二列给出其manager
- Internet History, Technology and Security (Week⑨)
- 高博14讲--第七讲 视觉里程计-7.3 2D-2D:对极几何
- 服务端渲染(SSR) VS 客户端渲染