第17章.Hibernate的检索方式
1.HQL检索方式
采用HQL检索时,需要定义字符串形式的HQL查询语句。
2.QBC检索方式
QBCAPI由org.hibernate.Criteria接口,org.hibernate.criterion.Criterion接口
和org.hibernate.Restrictions类组成,支持运行时动态生成查询语句。
创建Criteria对象;通过Restrictions设定Criterion条件;
调用list()方法执行查询。
3.使用别名
检索一个持久化类的所有实例。
//采用HQL检索方式 List result=session.createQuery("from Customer").list(); //采用QBC方式 List result=session.createCriteria(Customer.class).list();
4.多态查询
查询出当前类及所有子类的实例。
5.对查询结果排序,以及分页查询
6.检索单个对象
7.可滚动的结果集
第22章.Hibernate的缓存
1.持久化层缓存的范围决定了缓存的生命周期以及能被谁访问。可以分为事务范围 进程范围和集群范围。
事务范围的缓存是持久化层的第一级缓存,通常是必须的,进程范围或集群范围是第二级缓存,通常是可选的。
2.当两个并发的事务同时访问持久化层的同一数据缓存时,也有可能出现各类缓存问题。
3.第二级缓存可以设置几种缓存隔离策略:事务型,读写型,非严格读写型,只读型。
事务隔离级别越高,并发性能就越低。
符合以下条件的数据可以放到第二级缓存中:
很少被修改的数据;
不是很重要的数据;
不会被并发访问的数据;
参考数据;
4.Hibernate 提供两级缓存,第一级缓存是session级的缓存,
第二级缓存是一个可插拔的缓存插件,由SessionFactory负责管理。由于SessionFactory对象的生命周期和应用程序的整个进程对应,因此第二级缓存是进程范围或者集群范围的缓存。
缓存适配器(Cache Provider) 由于把具体的缓存实现软件与Hibernate集成。
Hibernate 还为查询结果提供了一个查询缓存,它依赖于第二级缓存。
5.当应用程序调用Session的save()/update()/saveorupdate()/load()/或get()方法,以及调用Query查询接口的list()/
iterate()或filter()方法时。如果在session的缓存中还存在相应的对象,Hibernate就会把该对象加入到第一级缓存中,当清理缓存时,Hibernate会根据缓存中对象的状态来同步更新数据库。
Session提供了两个方法,但多数情况并不提倡使用。
evict(Object 0 );从缓存中清除参数指定的持久化对象。
clear();清空缓存中所有持久化对象。
6.配置二级缓存主要包含以下步骤:
(1)选择需要使用第二级缓存的持久化类,设置它的第二级缓存的并发访问策略。
(2)选择合适的缓存插件,每一种缓存插件都有自带的配置文件,需要手工配置。