hibernate学习笔记第七天:二级缓存和session管理
二级缓存配置
1.导入ehcache对应的三个jar包
ehcache/*.jar
2.配置hibernate使用二级缓存
2.1设置当前环境开始二级缓存的使用
<property name="cache.use_second_level_cache">true</property>
2.2设置使用的二级缓存种类
<property name="cache.provider_class">org.hibernate.cache.EhCacheProvider</property>
3.设置加入二级缓存的模型
方法一:
在hbm.xml文件中,设置类和关联关系对象是否使用二级缓存
<class name="cn.itcast.h3.query.hql.vo.TeacherModel" table="tbl_teacher">
***** <cache usage="read-write"/>
<id name="uuid" column="uuid">
<generator class="native" />
</id>
<property name="teacherName"/>
<property name="nick"/>
<set name="students">
***** <cache usage="read-write"/>
<key column="teacherUuid"/>
<one-to-many class="cn.itcast.h3.query.hql.vo.StudentModel"/>
</set>
</class>
方法二:
类级缓存的配置
<class-cache
usage="read-write"
class="cn.itcast.h3.query.hql.vo.TeacherModel"
/>
模型中的集合缓存的配置
<collection-cache
usage="read-write"
collection="cn.itcast.h3.query.hql.vo.TeacherModel.students"
/>
<class-cache
usage="read-write"
class="cn.itcast.h3.query.hql.vo.StudentModel"
/>
在进行集合缓存配置时,如果使用了某种集合,必须将该集合中的模型也配置到缓存中,
并且是类级缓存
4.二级缓存自身的配置
写在src目录下,ehcache.xml
<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../config/ehcache.xsd">
<diskStore path="d:\cache-data"/>
<defaultCache
maxElementsInMemory="10"
eternal="false"
timeToIdleSeconds="120"
timeToLiveSeconds="1200"
overflowToDisk="true"
maxElementsOnDisk="10000000"
diskPersistent="false"
diskExpiryThreadIntervalSeconds="120"
memoryStoreEvictionPolicy="LRU"
/>
</ehcache>
5.自定义缓存级别设置
6.测试二级缓存的存在性
7.二级缓存中的数据格式
二级缓存中存储的是加载的数据的散装格式,散装数据
读取二级缓存时,每次创建一个全新的对象,并根据其中OID,查找到对应的属性数据,进行组装
8.验证SQL查询对缓存的影响
使用SQL查询的内容会加载到二级缓存中
使用SQL查询不读取二级缓存的数据,无论是否提供OID
9.添加的数据是不进入二级缓存的
10.删除的数据影响二级缓存中的对应数据
11.修改的数据影响二级缓存中的对应数据
关联集合数据二级缓存操作
1.关联集合数据也进入二级缓存
2.关联集合缓存里面存储的是每个对象的OID,而不是所有的数据,因此当类级缓存没有存储数据时
关联集合缓存中仅存OID,再次获取时,必须重新按照OID查找数据
Hibernate的更新操作
当执行DML格式更新数据库,而不是使用常规的更新时,此时可能影响的数据量过多
当再次读取二级缓存时,无论读取曾经修改过的模型的任意数据,全部重新加载
Query q = s.createQuery("update TeacherModel set teacherName=:teacherName where uuid = :uuid");
q.setString("teacherName", "测试更新1");
q.setLong("uuid", 4L);
q.executeUpdate();
查询缓存
查询缓存是将每次查询的SQL语句与查询的结果全部保存起来,一对一
查询缓存开启方式
cfg.xml
<property name="cache.use_query_cache">true</property>
针对某一次的查询设定是否使用查询缓存
Query q = ....
q.setCacheable(true);
Session管理
表现层
页面数据收集,将数据封装后,传递给逻辑层
逻辑层
组合业务功能,将数据传递给数据层
void 转账(){
事务开启
A转账到银行总账号 update
银行总账号转账到B update
事务提交
}
数据层
数据处理
update(){}
解决方案:
针对一次请求,创建一个Session对象
使用线程绑定Session就可以解决上述问题
1.配置cfg.xml,设置开启线程绑定Session
<property name="current_session_context_class">thread</property>
2.获取Session对象
Session s = HibernateUtil.getSf().getCurrentSession();
hibernate学习笔记第七天:二级缓存和session管理的更多相关文章
- HIbernate学习笔记(七) hibernate中的集合映射和继承映射
九. 集合映射 1. Set 2. List a) @OrderBy 注意:List与Set注解是一样的,就是把Set更改为List就可以了 private List< ...
- HIbernate学习笔记(八) hibernate缓存机制
hibernate缓存 一. Session级缓存(一级缓存) 一级缓存很短和session的生命周期一致,因此也叫session级缓存或事务级缓存 hibernate一级缓存 那些方法支持一级缓存: ...
- Hibernate学习笔记二:Hibernate缓存策略详解
一:为什么使用Hibernate缓存: Hibernate是一个持久层框架,经常访问物理数据库. 为了降低应用程序访问物理数据库的频次,从而提高应用程序的性能. 缓存内的数据是对物理数据源的复制,应用 ...
- Hibernate学习笔记(二)
2016/4/22 23:19:44 Hibernate学习笔记(二) 1.1 Hibernate的持久化类状态 1.1.1 Hibernate的持久化类状态 持久化:就是一个实体类与数据库表建立了映 ...
- Hibernate学习笔记(一)
2016/4/18 19:58:58 Hibernate学习笔记(一) 1.Hibernate框架的概述: 就是一个持久层的ORM框架. ORM:对象关系映射.将Java中实体对象与关系型数据库中表建 ...
- Java NIO 学习笔记(七)----NIO/IO 的对比和总结
目录: Java NIO 学习笔记(一)----概述,Channel/Buffer Java NIO 学习笔记(二)----聚集和分散,通道到通道 Java NIO 学习笔记(三)----Select ...
- JVM学习笔记-第七章-虚拟机类加载机制
JVM学习笔记-第七章-虚拟机类加载机制 7.1 概述 Java虚拟机描述类的数据从Class文件加载到内存,并对数据进行校验.转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型,这个过程被 ...
- Hibernate学习笔记3
---恢复内容开始--- 一.hibernate如何转化jdbc代码实例[通过hibernate构建jdbc后往数据库传对象] import java.sql.Connection;import ja ...
- Hibernate 学习笔记一
Hibernate 学习笔记一 今天学习了hibernate的一点入门知识,主要是配置domain对象和表的关系映射,hibernate的一些常用的配置,以及对应的一个向数据库插入数据的小例子.期间碰 ...
随机推荐
- Spring的RestTemplate
Spring提供了一个RestTemplate模板工具类,对基于Http的客户端进行了封装,并且实现了对象与json的序列化和反序列化,非常方便.RestTemplate并没有限定Http的客户端类型 ...
- mssql 数据库表行转列,列转行 比较经典
--行列互转 /******************************************************************************************** ...
- Ubuntu 18.04 设置开机启动脚本 rc.local systemd
ubuntu18.04不再使用initd管理系统,改用systemd. ubuntu-18.04不能像ubuntu14一样通过编辑rc.local来设置开机启动脚本,通过下列简单设置后,可以使rc.l ...
- webService的介绍与简单使用
webService开发项目介绍: 1 Webservice:跨语言跨平台的远程调用技术.Web service 即web服务,它是一种跨编程语言和跨操作系统平台的远程调用技术即跨平台远程调用技术. ...
- Nginx+Tomcat+Https 服务器负载均衡配置
这篇过气了! 重新补一个:http://www.cnblogs.com/hackyo/p/6809773.html 由于需要,得搭建个nginx+tomcat+https的服务器,搜了搜网上的发现总是 ...
- npm与yarn命令对比
Yarn是由Facebook.Google.Exponent 和 Tilde 联合推出了一个新的 JS 包管理工具 Yarn 是为了弥补 npm 的一些缺陷而出现的(比如,npm install时候会 ...
- 让overflow:auto页面滚动条出现时不跳动
今天看到一篇张鑫旭的文章,转载过来.https://www.zhangxinxu.com/wordpress/2015/01/css-page-scrollbar-toggle-center-no-j ...
- 21.Buffer Pool与压缩页/CheckPoint/LSN
一. 思考题解析• 查看Buffer Pool中的Flush List不要在线上操作该SQL语句,开销较大 SELECT pool_id, lru_position, space, page_numb ...
- 分享12款 JavaScript 表格控件(DataGrid)
JavaScript 表格控件可以操作大数据集的 HTML 表格,提供各种功能,如分页.排序.过滤以及行编辑.在本文中,我们整理了13个最好的 JavaScript 表格插件分享给开发人员,开发者可以 ...
- 快速安装nginx
1.创建nignx用户 /usr/sbin/groupadd -f nginx /usr/sbin/useradd -g nginx nginx 2.安装依赖 yum install gcc gcc- ...