二级缓存配置
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();

最新文章

  1. PHP的学习--RSA加密解密
  2. 使用RXTX获取电脑串口
  3. [PHP]程序员技能栈
  4. IOS UILabel 根据内容自适应高度
  5. OC:属性、点语法、KVC
  6. java web 学习一
  7. WebService简单使用
  8. final关键字的作用
  9. sizeof()的用法
  10. 【G】开源的分布式部署解决方案(一) - 开篇
  11. Oracle存储过程跨用户执行查询报错
  12. Android 根据字符串动态获取资源ID
  13. spark计算两个DataFrame的差集、交集、合集
  14. 基于hashicorp/raft的分布式一致性实战教学
  15. djangoの2
  16. sofa-rpc 服务端源码流程走读
  17. VI 基本可视模式
  18. jQuery中一些不常用的方法属性【转载】
  19. 160505、oracle 修改字符集 修改为ZHS16GBK
  20. Linux的SMP,UMA,NUMA

热门文章

  1. H5新属性FileReader实现选择图片后立即显示在页面上
  2. Golang入门教程(十六)Goridge -高性能的 PHP-to-Golang RPC编解码器库
  3. centos6.8离线安装nginx
  4. Iterator迭代器
  5. termios结构体的内容
  6. poj2559/hdu1506 单调栈经典题
  7. Bootstrap 使用
  8. web api 过滤器
  9. Redis + keepalived 高可用行配置检测脚本
  10. javascript给定了日期如何获得星期几