1. Criteria 是一种比 HQL 更面向对象的查询方式
1 ) Criteria 的创建方式: Criteria c = session.createCriteria(User.class)
2 )添加过滤条件: c.add(Restrictions.gt("id",3)); // id 的值要大于 3
3 )指定排序: c.addOrder(Order.desc("id")); // 按 id 的值降序排列
4) 分页: Criteria.setFirstResult(0) 和 Criteria.setMaxResults(10)
2. 缓存
1 )一级缓存, Session 级共享,由 Hibernate 管理
2 )二级缓存, SessionFactory 级别的全局缓存,它底下可以使用不同的缓存类库,例如: EhCache, OSCache, TreeCache 等。使用时要在 hibernate.cfg.xml 中增加配置:
<property name="cache.provider_class">
org.hibernate.cache.HashtableCacheProvider
</property>
另外,具体的使用是每个类的缓存单独存放,也需要单独配置。 使用方式为:在 hibernate.cfg.xml 中增加:
<class-cache class="className" usage="read-only"/>
或在映射文件的 class 元素加入子元素:
<cache usage="read-write"/>
3.ThreadLocal 是一个线程安全的变量存储的管理实体, ThreadLocal 变量类似一个 HashMap ,它的 key 集合就是 Thread.currentThread() ,它的 value 集合就是要跨域共享的对象。当代码从 threadLocal 变量 get() 来取对象的时候,就是以代码运行所在的 currentThread 为 key ,去找它对应的 value 共享对象。因而在一个 thread 里面,任何被该 thread 调用到的类,方法代码都可以取到同一个跨域共享对象。而不同的 thread 则取到不同的对象
4. Hibernate 也提供了对原生 SQL 以及存储过程的支持,使用 SQLQuery 接口方法进行查询
5.Hibernate 数据加载方式:即时加载 , 延迟加载 , 预先加载和批量加载