
课程咨询: 400-996-5531 / 投诉建议: 400-111-8989
认真做教育 专心促就业
接上一期的知识,这一期昆明达内的老师给大家讲查询缓存(Query Cache)
hibernate的查询缓存是主要是针对普通属性结果集的缓存,而对于实体对象的结果集只缓存id。
在一级缓存,二级缓存和查询缓存都打开的情况下作查询操作时这样的:
查询普通属性,会先到查询缓存中取,如果没有,则查询数据库;查询实体,会先到查询缓存中取id,如果有,则根据id到缓存(一级/二级)中取实体,如果缓存中取不到实体,再查询数据库。
在hibernate.cfg.xml配置文件中,开启查询缓存
<!--是否开启查询缓存,true开启查询缓存,false关闭查询缓存-->
<property ame="cache.use_query_cache">true</property>
开启查询缓存后还需要在程序中进行启用查询缓存
public static void testQueryCache(){
Session session=HibernateUtil.getSession();
String hql="from Emp as e";
Query query=session.createQuery(hql);
query.setCacheable(true);//启用查询缓存(二级缓存)
List<Emp> empList=query.list();
session.close();
}
查询缓存是基于二级缓存机制如果根据Bean的属性查询可以不开启二级缓存代码如下:
session = HibernateUtils.getSession();
t = session.beginTransaction();
Query query = session.createQuery("select s.name from Student s");
//启用查询缓存
query.setCacheable(true);
List<String> names = query.list();
for (Iterator<String> it = ames.iterator(); it.hasNext();) {
String name = it.next();
System.out.println(name);
}
System.out.println("================================");
query = session.createQuery("select s.name from Student s");
//启用查询缓存
query.setCacheable(true);
//没有发出查询语句,因为这里使用的查询缓存
names = query.list();
for (Iterator<String> it = ames.iterator(); it.hasNext();) {
String name = it.next();
System.out.println(name);
}
t.commit();
了解详情请登陆昆明达内IT培训官网(km.tedu.cn)!