二级缓存配置
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管理的更多相关文章

  1. HIbernate学习笔记(七) hibernate中的集合映射和继承映射

    九.       集合映射 1. Set 2. List a)        @OrderBy 注意:List与Set注解是一样的,就是把Set更改为List就可以了 private List< ...

  2. HIbernate学习笔记(八) hibernate缓存机制

    hibernate缓存 一. Session级缓存(一级缓存) 一级缓存很短和session的生命周期一致,因此也叫session级缓存或事务级缓存 hibernate一级缓存 那些方法支持一级缓存: ...

  3. Hibernate学习笔记二:Hibernate缓存策略详解

    一:为什么使用Hibernate缓存: Hibernate是一个持久层框架,经常访问物理数据库. 为了降低应用程序访问物理数据库的频次,从而提高应用程序的性能. 缓存内的数据是对物理数据源的复制,应用 ...

  4. Hibernate学习笔记(二)

    2016/4/22 23:19:44 Hibernate学习笔记(二) 1.1 Hibernate的持久化类状态 1.1.1 Hibernate的持久化类状态 持久化:就是一个实体类与数据库表建立了映 ...

  5. Hibernate学习笔记(一)

    2016/4/18 19:58:58 Hibernate学习笔记(一) 1.Hibernate框架的概述: 就是一个持久层的ORM框架. ORM:对象关系映射.将Java中实体对象与关系型数据库中表建 ...

  6. Java NIO 学习笔记(七)----NIO/IO 的对比和总结

    目录: Java NIO 学习笔记(一)----概述,Channel/Buffer Java NIO 学习笔记(二)----聚集和分散,通道到通道 Java NIO 学习笔记(三)----Select ...

  7. JVM学习笔记-第七章-虚拟机类加载机制

    JVM学习笔记-第七章-虚拟机类加载机制 7.1 概述 Java虚拟机描述类的数据从Class文件加载到内存,并对数据进行校验.转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型,这个过程被 ...

  8. Hibernate学习笔记3

    ---恢复内容开始--- 一.hibernate如何转化jdbc代码实例[通过hibernate构建jdbc后往数据库传对象] import java.sql.Connection;import ja ...

  9. Hibernate 学习笔记一

    Hibernate 学习笔记一 今天学习了hibernate的一点入门知识,主要是配置domain对象和表的关系映射,hibernate的一些常用的配置,以及对应的一个向数据库插入数据的小例子.期间碰 ...

随机推荐

  1. Sqlserver中的触发器

    一 什么是触发器 1.1  触发器的概念   触发器(trigger)是SQL server来保证数据完整性的一种方法,它是与表事件相关的特殊的存储过程,它的执行是由事件来触发,当对一个表进行操作(  ...

  2. powershell 中常用cmd,unix命令(get-alias)

    powershell 中常用cmd,unix命令(get-alias) Get-Content Alias cat -> Get-Content Alias gc -> Get-Conte ...

  3. js取指定范围随机值【原】

    js取指定范围随机值 <HTML> <HEAD> <meta http-equiv="content-Type"content="text/ ...

  4. spring整合ActiveMq

    spring整合ActiveMq: 1:依赖的jar包: 2:spring-activemq.xml    的配置: 代码: <?xml version="1.0" enco ...

  5. 从零开始搭建高性能高可用Tomcat服务器

    目标: Tomcat+Nginx+Memcached Ubuntu 16.04 64位测试通过 动静分类.负载均衡.集群.Javolution序列化.高性能.高可用 配置环境(目前均为最新稳定版): ...

  6. 在Linux(CentOS 6.6)服务器上安装并配置基于Apache的SVN服务器

    #!/bin/bash # # 在Linux(CentOS 6.6)服务器上安装并配置基于Apache的SVN服务器: # # .安装服务 # .创建svn版本库 # .创建svn用户 # .配置sv ...

  7. Vertica系列: Vertica DB连接负载均衡

    背景 谈到负载均衡, 对于数据库集群需要区分几个概念: 运算的负载均衡, Vertica 本身是 MPP 数据库, SQL 操作自动会利用多台机器来加快处理速度. 数据库连接的负载均衡, Vertic ...

  8. MFC项目中:报错:“fatal error LNK1561: 必须定义入口点”解决方法

    编译的时候,报错:“fatal error LNK1561: 必须定义入口点” 解决方案1: 右键->属性->链接器->高级->入口点,设置成:WinMainCRTStartu ...

  9. 腾讯云服务器ubuntu16.04系统下安装Python版本管理工具pyenv

    一. 系统环境   腾讯云提供的系统是ubuntu 16.04 LTS,系统默认的Python版本是2.7.12,我想要安装3.6和其他的版本.   比较方便的是腾讯云已经默认安装好了git和curl ...

  10. 合肥学院第二届卓越IT-程序设计大赛E+J

    E链接 小飞有nn的魔法纸片(可以变出糖果), 现在有m个人来找小飞玩游戏, 小飞希望用魔法纸片来使朋友们开心,纸片可以被随便裁剪,nn的魔法纸片可以裁剪成任意大小的小魔法纸片,小飞通过pubgoso ...