笔记:Hibernate 查询缓存

Posted 追寻自由的路途

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了笔记:Hibernate 查询缓存相关的知识,希望对你有一定的参考价值。

Hibernate 的一级缓存和二级缓存都是对实体进行缓存,他不会缓存普通属性,如果想对普通熟悉进行缓存,可以考虑使用查询缓存。

对于查询缓存来说,他缓存的Key就是查询所用的 HQL 或者 SQL 语句,查询缓存不仅要求使用的语句相同,还要求参数必须一致,查询缓存默认是关闭的,为了开启查询缓存,需要修改 Hibernate.cfg.xml 配置文件,增加如下配置:

<property name="hibernate.cache.use_query_cache">true</property>

要使用查询缓存还必须在调用查询时,使用 setCacheable 方法开启缓存,示例代码如下:

? ?

public static void main(String[] args) {

Session curSession = hibernateUtils.openSession();

try {

? ?

// 第一次查询,启用了缓存

List list = curSession.createQuery("SELECT trm FROM TransitRecordModel trm").setCacheable(true).list();

System.out.println("Query Size=" + list.size());????????????????

// 第二次查询,启用了缓存,因此从缓存读取,不发起数据库查询操作

list = curSession.createQuery("SELECT trm FROM TransitRecordModel trm").setCacheable(true).list();

System.out.println("Query Size=" + list.size());

} finally {

if (curSession != null) {

curSession.close();

}

}

}

? ?

查询缓存和二级缓存的交互 通过 setCacheMode 方法来设置,有如下几种类型:

  1. CacheMode.NORMAL:正常模式(默认),Session会向二级缓存中读取和写入数据。
  2. CacheMode.IGNORE:忽略模式,Session不会向二级缓存读取,也不会写入数据。
  3. CacheMode.GET:Session对二级缓存只读不写。
  4. CacheMode.PUT:Session对二级缓存只写不读。
  5. CacheMode.REFRESH:刷新模式,Session不会从二级缓存中读取数据,但会向其中写入从数据库读取的数据。和PUT的区别在于REFRESH会忽略配置文件中的hibernate.cache.use_minimal_puts属性,强制刷新二级缓存中的所有数据。

? ?

? ?

以上是关于笔记:Hibernate 查询缓存的主要内容,如果未能解决你的问题,请参考以下文章

Hibernate学习笔记 — 查询缓存的应用

[原创]java WEB学习笔记93:Hibernate学习之路---Hibernate 缓存介绍,缓存级别,使用二级缓存的情况,二级缓存的架构集合缓存,二级缓存的并发策略,实现步骤,集合缓存,查询缓

HIbernate学习笔记3 之 缓存和 对象的三种状态

JAVAEE学习笔记hibernate02:实体规则对象状态缓存事务批量查询和实现客户列表显示

hibernate笔记--缓存机制之 一级缓存(session缓存)

hibernate笔记