day34_hibernate二级&查询缓存

二级缓存

实用的场合

  • 公开的数据
  • 数据基本上不发生变化
  • 该数据保密性不是很强 说

明:如果一个数据一直在改变,不适合用缓存。

生命周期

二级缓存的生命周期和sessionFactory是一致的。

位置

设置二级缓存

利用的是ehcache实现的二级缓存

1、在hibernate的配置文件中

这里写图片描述

这里写图片描述

2、指定哪个类开启二级缓存

这里写图片描述

这里写图片描述

操作

哪些方法可以把对象放入到二级缓存

  • get方法,
  • list方法可以把一个或者一些对象放入到二级缓存中哪些方法可以把对象从二级缓存中提取出来
  • get方法,
  • iterator方法可以提取

策略

这里写图片描述

 read-only:对象只要加载到二级缓存以后,就只能读取了,不能进行修改。
 read-write:对二级缓存中的对象能够进行读和写的操作

查询缓存

  一级缓存和二级缓存都是对象缓存:就是把该对象对应的数据库表中的所有的字段
全部查询出来了,这种查询在某些场合下会让效率降低。例如:表中的字段特别多,
但是程序中所需要的字段却很少。
   查询缓存也叫数据缓存:内存(页面)中需要多少数据就把多少数据放入到查询缓存
中。

生命周期

只要一些数据放入到查询缓存中,该缓存会一直存在,直到缓存中的数据被修改了,该
缓存的生命周期就结束了。

操作步骤

1、在hibernate的配置文件中,开启查询缓存

这里写图片描述

2、使用查询缓存
查看QueryCacheTest的例子

总结

hibernate总共有三种缓存

  • 一级缓存
    一级缓存解决的问题是在一次请求中,尽量减少和数据库交互的次数,在session.flush之前,改变的是一级缓存的对象的属性。当session.flush的时候才要
    跟数据库交互,一级缓存解决不了重复查询的问题。一级缓存是对象缓存

  • 二级缓存
    二级缓存可以把经常不改变、常用的公共的数据放入进来,可以重复查询,利用get方法和iterator方法可以把二级缓存中的数据得到。

  • 查询缓存
    查询缓存可以缓存数据或者对象,可以利用list方法把查询缓存中的数据放入到缓存中,查询缓存中存放的是数据,是数据缓存。

session

创建session的方式
sessionFactory.openSession

这里写图片描述

每次都要创建一个新的session,相当于一个新的连接

sessionFactory.getCurrentSession

在hibernate.cfg.xml文件中

这里写图片描述

如果用该方法产生session,则crud操作必须在事务的环境下运行
当执行transaction.commit的方法的时候,session自动关闭。

说明:
这么做相当于把session与transaction绑定在一起了。
当事务提交的时候,session关闭不好,因为如果事务提交以后,再做关于数据库
的操作,就不能做了。

关系操作

  • 一对多的单项
    inverse与cascade的关系
    cascade指的是级联操作,操作的是一般属性,指的是对象与对象的操作
    inverse指的是关系操作,针对的就是外键

  • 一对多的双向
    当多的一方维护关系时,不会发出更新关系的update语句,而一的一方维护关系时
    需要发出维护关系的update语句,所以在这里,一般情况下,多的一方维护关系效率
    比较高。

  • 多对多
    维护关系
    多对多建立关系相当于在第三张表中插入一行数据
    多对多解除关系相当于在第三张表中删除一行数据
    多对多修改关系相当于先删除后增加
    多对多谁维护效率都一样。看需求

查询缓存

这里写图片描述

二级缓存的位置

这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值