hibernate一级缓存、二级缓存
hibernate缓存是指为了降低应用程序对物理数据源访问的次数,从而提高应用程序的运行性能的一种策略。并不是指计算机内存或者cpu的一二级缓存。 ORM框架访问数据库的效率直接影响应用程序的运行速度,提升和优化orm框架的执行效率至关重要。hibernate缓存是提升和优化hibernate执行效率的重要手段。
一级缓存代码总结:
1,同一个session两次查询同一个对象,只输出一个sql语句,证明默认使用缓存了;
2,在不同的session中多次查询同一个对象,会执行多次数据库查询;
3,在一级缓存中,每一个相同的对象都具有唯一的OID;一级缓存又叫session级缓存,或者会话级的缓存。生命周期等同session;
4,一级缓存是默认开启的,并且无法取消。管理一级缓存可以通过session.evict(obj),session.clear()方法清除一个或全部对象;
5,query.list()方法和query.iterator()方法不会使用一级缓存,但是iterator方法得到对象ID后,得到对象的其他属性会首先使用一级缓存,得到对象ID不使用一级缓存,是向数据库发送的sql语句。
二级缓存配置总结:
1,二级缓存要用到commons-logging-1**.jar和ehcache.jar,ehcache.xml配置文件放在项目路径下;
2,hibernate.cfg.xml中,指定二级缓存的外部实现类,要配置
<property name="cache.provider_class">net.sf.ehcache.hibernate.EhCacheProvider</property>
3,哪个实体类要用到二级缓存,就在它的配置文件的class标签中添加<cache usage="read-only"/>,使该类的二级缓存生效,注解需再查找,cache标签还有另外的2个属性include等;
4,二级缓存又称为全局缓存,应用级缓存。适用范围是当前应用的所有会话。二级缓存是可插播式缓存,默认是EHChache,还支持其他二级缓存组件,如Hashtable、OSChache等;
5,二级缓存存放很少被修改的数据,不是很重要,允许偶尔并发,不会频繁并发的参考数据。
总结对比:(使用慕课网的一张图片,可参考慕课网相关视频)