Hibernate缓存 查询缓存

中国人最喜欢访问的网站
只要注册ofo就送你10块钱,还等什么,快来注册吧

网上说query.setCacheable(true)criteria.setCacheable(true)`` 这两种方式的缓存命中率低,个人认为谈论这个“无卵用”; 我在测试的时候发现,上面的操作会受配置的限制,必须在配置文件中打开hibernate.cache.use_query_cache=true,之后setCacheable`才起作用;

查询缓存可以解决二级缓存的不足;它的作用范围也是SessionFactory

可以缓存hql语句查询,也可以缓存query和criteria查询;

下面针对query和criteria进行测试:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
/**
* 对查询缓存测试 <br>
* 1. 只有B处起作用,作用于session; <br>
* 2. 配置文件中打开query_cache的前提下,setCacheable 是起作用的
*/
@Test
public void testCriteriaInCache() {
System.out.println("=============");
Session session = hibernateTemplate.getSessionFactory().openSession();
Criteria criteria = session.createCriteria(UserModel.class);
criteria.setCacheable(true); // 这里仅对B处起作用
criteria.add(Restrictions.eq("name", "Sucre"));
System.out.println("=============A" + criteria.list());
System.out.println("=============B" + criteria.list()); // B
criteria.add(Restrictions.eq("id", 1));
System.out.println("=============C" + criteria.list());
criteria = session.createCriteria(UserModel.class);
criteria.setCacheable(true);
criteria.add(Restrictions.eq("id", 1));
System.out.println("=============D" + criteria.list());
session = hibernateTemplate.getSessionFactory().openSession();
criteria = session.createCriteria(UserModel.class);
criteria.setCacheable(true);
criteria.add(Restrictions.eq("id", 1));
System.out.println("=============E" + criteria.list());
}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
/**
* 测试查询缓存 <br>
* 1. BC两处都是使用的A产生的缓存,作用于SessionFactory <br>
* 2. 配置文件中打开query_cache的前提下,setCacheable 是起作用的
*/
@Test
public void testQueryInCache() {
System.out.println("=============");
Session session = hibernateTemplate.getSessionFactory().openSession();
Query query = session
.createQuery("select u.name from UserModel as u where u.id=?");
query.setParameter(0, 1);
query.setCacheable(true);
String name = (String) query.list().get(0);
System.out.println("=============A" + name); // A
query = session
.createQuery("select u.name from UserModel as u where u.id=?");
query.setParameter(0, 1);
query.setCacheable(true);
name = (String) query.list().get(0);
System.out.println("=============B" + name); // B
session = hibernateTemplate.getSessionFactory().openSession();
query = session
.createQuery("select u.name from UserModel as u where u.id=?");
query.setParameter(0, 1);
query.setCacheable(true);
name = (String) query.list().get(0);
System.out.println("=============C" + name); // C
}
快下载安装吧,今天头条送你钱啦!!!!
中国人都在使用的地球上最好玩的游戏
中国人都在使用的地球上最好玩的游戏
中国人都在使用的地球上最快的浏览器
中国人都在使用的地球上最厉害的安全软件
中国人都在使用的地球上最好的看图王
中国人都在使用的地球上最快速的视频软件
中国人都在使用的地球上最全的视频软件
中国人都在使用的地球上最好最全的压缩软件
中国人都在使用的地球上最好的音乐播放器
中国人都在使用的地球上最安全的杀毒软件
中国人都在使用的地球上最全的影视大全