汪星人 发表于 2014-5-26 20:49

hibernate 延时加载 一级缓存二级缓存

hibernate 延时加载

load支持延时加载(懒加载)
get不支持延时加载

解决懒加载方法设置lazy="false"
lazy="true"默认使用懒加载
lazy="false"立即加载

在hiberante中设置lazy=“false”
在JAVAWEB开可以使用过滤器解决
在Struts2可以使用过滤器或者拦截器
在spring开始中SessionFilterInView过滤器解决


数据库关系
双向one-to-many
静态导包用法:
1、JDK5.0以上版本才可以使用
2、方法必须static 修饰
3、import static 类名.方法名
4、使用:    方法名()==类.方法名()


hibernate高级查询
1、HQL 查询对象 有SQL影子
2、QBC 语句只支持查询   
3、SQL语句 ibatis

hibernate缓存机制
1、一级缓存
        一级缓存也叫session缓存、事务缓存
        一级缓存和session绑定
支持session缓存方法:
1:get
2:load
3:       save
createQuery、createCriteria不支持一级缓存

session缓存中数据不能共享
//管理session缓存
session.close()关闭缓存
session.clear();//清空session缓存中所有的数据
session.evict(user);//清空当前对象
2、二级缓存
   二级缓存也叫sessionFactory缓存
(1)添加第三方类库
      ehcache-1.2.3.jar
      log4j-1.2.15.jar
      commons-logging.jar
   (2)把hibernate-3.3.2.GA\project\etc\ehcache.xml
      复制到工程src根目录
      <defaultCache
      maxElementsInMemory="10000" --最大对象数
      eternal="false"      
      <!--eternal="true"缓存不清空
      timeToIdleSeconds、timeToLiveSeconds失效
      -->
      timeToIdleSeconds="120"<!--对象最大活动状态时常-->
      timeToLiveSeconds="120"<!--缓存中对象的生命周期-->
      overflowToDisk="true" <!--对象超出最大值,就放入到临时目录-->
      />

      //超出缓存最大,放置临时目录
       <diskStore path="java.io.tmpdir"/>

      (3)在hibernate.cfg.xml中添加
       a:<!--
      是否使用二级缓存
         默认支持二级缓存
         -->
                <property name="hibernate.cache.use_second_level_cache">
                        true
                </property>
               
                b: <!-- 二级缓存提供者 -->
                <property name="hibernate.cache.provider_class">
                        org.hibernate.cache.EhCacheProvider
                </property>
                (4)使用:
                   a:在hibernate映射文件中使用*.hbm.xml
                      <cache usage="read-only"/><!-- 设置只读二级缓存 -->
                   b:在hiberante.cfg.xml统一管理
                   <class-cache class="com.tarena.entity.User" usage="read-only" />

二级缓存可以实现session数据共享

页: [1]
查看完整版本: hibernate 延时加载 一级缓存二级缓存