zoukankan      html  css  js  c++  java
  • hibernate3缓存(hibernate)

    一级缓存:
    当应用程序调用Session 的save() 、update() 、savaeOrUpdate() 、get() 或load() ,以及调用查询接口的list() 、iterate() 或filter() 方法时,如果在Session 缓存中还不存在相应的对象,Hibernate 就会把该对象加入到第一级缓存中。当清理缓存时,Hibernate 会根据缓存中对象的状态变化来同步更新数据库。
    Session 为应用程序提供了两个管理缓存的方法:
    evict(Object obj) :从缓存中清除参数指定的持久化对象。
    clear() :清空缓存中所有持久化对象。
    比如:
    我用get按id获取一条数据:Register re=(Register)this.getHibernateTemplate().get(Register.class,username);
    此时第一次在控制台会显示相应的SQL语句,在不重启服务器和在一定时间类(貌似默认是3分钟),再次按相同的id查询时,控制台是不会出现SQL语句!
    一级缓存是系统自己就配置好了的。

    二级缓存:
    在这里只是测试了find,在没有配置时,每次使用find查询相同条件的数据时,每次都会在控制台显示SQL语句,配置了一个,就可以实现一级缓存的效果,网上的方法都很类似,但没成功 = =!
    自己的方法:
    1.在hibernate配置文件中添加:

    <property name="hibernate.cache.use_query_cache">true</property>
    <property name="hibernate.cache.provider_class">org.hibernate.cache.EhCacheProvider</property>

    2.在要缓存的数据的实体配置文件中 添加:

    <cache usage="read-only"/>

    3.在查询dao中查询语句中添加

    this.getHibernateTemplate().setCacheQueries(true);

    4.添加ehcache.xml

  • 相关阅读:
    Codeforces Round #598 (Div. 3)(全)
    Codeforces Round #597 (Div. 2) F
    Codeforces Round #597 (Div. 2) D Shichikuji and Power Grid (MST)
    ACM bitset
    Codeforces Round #592 (Div. 2) E. Minimizing Difference
    Educational Codeforces Round 74 (Rated for Div. 2)D. AB-string
    Educational Codeforces Round 74 (Rated for Div. 2) tandard Free2play
    2018南昌邀请赛网络赛 单调栈 I
    rmq问题
    poj 3259Wormholes
  • 原文地址:https://www.cnblogs.com/estellez/p/4152983.html
Copyright © 2011-2022 走看看