三、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后