Hibernate学习笔记10
学习课程:
一级缓存 | Hibernate_Cache_Level_1 |
二级缓存 | Hibernate_Cache_Level_2 |
查询缓存 | Hibernate_Cache_Query |
1.一级缓存
一级缓存又称session级的缓存或事务级缓存,可以提高性能 生命周期很短和session一致 一级缓存无法清除但是可以管理,管理方法 session.clear();//清空缓存 session.evict();//清除以及缓存中指定的实体 | ||
testQuery1
|
| |
testQuery2
|
| |
testQuery3
|
| |
testQuery4
|
| |
testQuery5
|
| |
testQuery6
|
| |
testQuery7
|
| |
testQuery8
放弃操作 | 向数据库中加入1000条数据 为了避免一次性大量的实体数据入库导致内存溢出, 当加入一定的实体数据后 先flush 再clear 如果数据量特别大,考虑采用JDBC实现,如果jdbc不能满足要求可以考虑数据库本身的特定导入工具放弃Hibernate |
2.二级缓存
二级缓存,进程级缓存,SessionFactory级缓存 只缓存实体对象,缓存间可以共享 二级缓存的生命周期和SessionFactory的生命周期一致,SessionFactory可以管理二级缓存 //SessionFactory factory = HibernateUtils.getSessionFactory(); //factory.evict( Student.class );清空 //factory.evict( Student.class , 1 );清除二级缓存中指定的实体 | |||
配置信息: Student.hbm.xml
Hibernate.cfg.xml
| |||
testQuery1
|
| ||
testQuery2
|
| ||
testQuery3
|
| ||
testQuery4
|
|
3.查询缓存
查询缓存针对普通属性结果集 缓存普通属性 当查询实体的时候,缓存实体的ID 查询缓存的生命周期:当前关联的表(更新,删除,插入)发生修改,那么查询缓存生命周期结束 | ||
配置信息: Hibernate.cfg.xml
注:打开查询缓存不仅仅需要配置hibernate.cfg.xml还需要在代码中打开 query.setCacheable(true); | ||
testQuery1
|
| |
testQuery2
查询缓存只对query.list()起作用,query.iterate不起作用,也就是query.iterate不使用 查询缓存 |
| |
testQuery3
第二个session不会发出查询sql,因为查询缓存的生命周期和session无关 |
| |
testQuery4
|
| |
testQuery5
|
| |
testQuery6
|
|