首页 > 代码库 > 三、Hibernate高级

三、Hibernate高级

1、Query查询方式
  SQL,HQL,OID,QBC(query by criteria)
2、二级缓存
  sessionFactory缓存,也叫进程级的缓存,使用第3方插件实现的,只缓存实体,生命周期和sessionFactory一致
  使用环境:
    经常被访问
    改动不大
    数量有限
    不是很重要的数据,允许出现偶尔并发的数据
  使用方法:(一般用EHCache)
    导入jar包
    在hibernate.cfg.xml文件中
      设置使用二级缓存<property name="cache.use_second_level_cache">true</property>
      指定缓存策略ehcache
        <property name="hibernate.cache.provider_class">
          org.hibernate.cache.EhCacheProvider
        </property>
    配置ehcache.xml,定制缓存策略,共需指定5个属性
    选择哪个对象使用二级缓存机制
      在该对象的配置文件*.hbm.xml文件中配置如何使用二级缓存机制:<cache usage="read-only" region="sampleCache1"/>
        首先,通过region属性指定要使用的二级缓存;
        其次,通过usage属性指定使用二级缓存的方式
3、查询缓存
  概述:对普通属性进行缓存。如果关联的表发生了修改,那么查询缓存的生命周期也结束了
  使用环境:
    适用于查询结果数据量巨大,查询结果一般不轻易改变的查询(例如商品信息)
  使用方法:
    在hibernate.cfg.xml文件中加入<property name="hibernate.cache.use_query_cache">ture</property>
    在程序中必须手动启用查询缓存:query.setCacheable(true);
4、锁机制
  悲观锁+乐观锁
  悲观锁:当线程的事务没有结束前,其他事务都要等着
  乐观锁:谁在前,谁先操作
  实现原理:为数据库表增加一个字段version,当用户读取数据时,会将版本号version一同读出,
    如果该用户修改了数据,会先将读取的版本号与数据库中的版本号做比对,
    如果相同,才进行修改,修改完成后,会将版本号version+1
    如果不相同,则不能修改,会抛出异常
  使用方法:
    对象增加version属性
    映射文件*.hbm.xml的class节点增加属性optimistic-lock="lock"
      增加节点<version name="version" type="integer" column="t_version"/>必须放在id后