1. HibernateTemplate模板类
*装载单个实体的辅助方法。
包括了get(...),load(...),loadAll(...),refresh(...),evict(...),initialize(...),enableFliter(...)等方法,这些方法都会将具体操作委派给HiberanteCallback接口的doInHibernate()回调方法,进而让Session与数据库进行交互。
*存储单个实体的辅助方法。
包括了lock,save,update,saveOrUpdate,saveOrUpdateAll,replicate,persist,merge,delete,flush,clear等方法。
*基于HQL的查找方法
包括了find,findByNamedParam,findByValueBean等方法
*基于命名查询的查找方法
包括了findByNamedQuery,findByNamedQueryAndNamedParam,findByNamedQueryAndValueBean等方法
*基于分离式criteria风格API的查找方法的使用。
所谓分离式criteria,即在Session外部构建好criteria对象,随后将它同任意活动的session关联,从而执行CRUD操作。有方法如下:findByCriteria,findByExample。
*基于迭代器和批量处理的实用方法
包括了 iterate,closeIterator,bulkUpdate等方法。
2. 关于SessionFactory.getCurrentSession()方法的使用
其中有几个细节如下:
*SessionFactory.getCurrentSession()返回的Session对象是当前活动事务所征集的Session;
*Spring内置的DAO抽象提供了DataAccessException异常体系,适合于Spring提供的各种DAO层技术,如JDBC,Hibernate,JPA等。
*@Repository是应用于类的注解,其直接应用到DAO对象本身。
3. LocalSessionFactoryBean。
LocalSessionFactoryBean集结了Hibernate SessionFactory相关的所有元数据信息。其继承链如下:
AbstractSessionFactoryBean<--LocalSessionFactoryBean<--AnnotationSessionFactoryBean
Spring xml中配置LocalSessionFactoryBean的hibernateProperties属性,其功效同hibernate.properties和hibernate.cfg.xml差不多,且会优先读取,会覆盖configLocation,configLocations属性制定的配置信息。
除此之外,还可以启用mappingLocations,mappingJarLocations,mappingDirectoryLocations,mappingResources等属性,这些属性能通过查找Jar包,目录,类路径获得映射信息,或直接制定具体映射信息。
4. 基于Hibernate的Lob处理。
Hibernate提供了如BlobStringType,BlobSerializableType,BlobByteArrayType用于处理Blob字段的org.hibernate.usertype.UserType,这三个类型分别能与java中的String,Serializable,byte[]的相互转换。ClobStringType则用于处理Clob字段,实现了与java String的转换。
具体Lob处理实例可见Spring官方的imagedb工程实例。
5.混合使用JDBC和Hibernate。
当调用Session接口的saveOrUpdate,update等CRUD操作时,这些操作对应的SQL语句可能不会立即同步到RDBMS中,可以采用Session的刷新策略,即FlushMode的具体取值。
使用HibernateTemplate和SessionFactory.getCurrentSession()的差异需分场合具体分析。