查询缓存是在二级缓存的基础上,所以要想开启查询缓存,还要在hibernate,cfg.xml文件中多加一个属性:开启查询缓存:
<property name="cache.use_query_cache">true</property>
下面是查询缓存的使用
@Test
public void testQueryCache(){
Session session=sessionFactory.openSession();
Query query=session.createQuery("from Classes");
//开启把获取到的信息放到查询缓存中
query.setCacheable(true);
List<Classes> classes=query.list();
query=session.createQuery("from Classes");
//开启从缓存中获取信息
query.setCacheable(true);
classes=query.list();
session.close();
}
运行之后,hibernate发出一条sql语句:
Hibernate: select classes0_.cid as cid0_, classes0_.cname as cname0_, classes0_.cdescription as cdescrip3_0_ from Classes classes0_
但是由于上面两条query语句查询的内容都是一样,那么我们来试一下不一样的hql语句:
@Test
public void testQueryCache(){
Session session=sessionFactory.openSession();
Query query=session.createQuery("from Classes");
query.setCacheable(true);
List<Classes> classes=query.list();
//从from Classes改成如下
query=session.createQuery("select cname from Classes");
query.setCacheable(true);
classes=query.list();
session.close();
}
运行之后,发出了2条sql语句:
Hibernate: select classes0_.cid as cid0_, classes0_.cname as cname0_, classes0_.cdescription as cdescrip3_0_ from Classes classes0_
Hibernate: select classes0_.cname as col_0_0_ from Classes classes0_
如果需要不断的查询某些相同的数据,即如果它们的的sql语句是一样的话,要进行很多次查询,那么使用查询缓存,效率将大大提高