关于spring整合hibernate的一些概念
最近初学spring,整合hibernate遇到了种种问题,包括sessionfactory 的注入;
(1):spring 的自带的 实现sessionfactory接口的类AnnotationSessionFactoryBean(其实源代码中并没有实现此接口,但是sessionfactory的方法初始化的时候被动态切入到此类当中),beans.xml 如下:
<bean id="sessionFactory" ref="dataSource"/>
<property name="annotatedClasses">
<list>
<value>com.shelley.model.User</value>
</list>
</property>
<property name="hibernateProperties">
<!-- <value>
hibernate.dialect=org.hibernate.dialect.MySQLInnoDBDialect
</value>-->
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</prop>
<prop key="hibernate.show_sql">true</prop>
<!-- <prop key="hibernate.jdbc.use_get_generated_keys">false</prop>-->
</props>
</property>
</bean>
对以上的配置信息中可以看到:参数1为:dataSource,即注入数据源连接池类,此类同样可以通过spring 来指定;参数2为:表映射的实体类的数组;参数3:为注入一些hibernate一些配置参数,由AnnotationSessionFactoryBean的父类中方法public void setHibernateProperties(Properties hibernateProperties) {
this.hibernateProperties = hibernateProperties;
} 来实现,是一个Properties 数据类型 。
(2):Transaction annotation properties 主要分为propagation ,isolation,readOnly,timeout,rollbackFor,rollbackForClassname,noRollbackFor,noRollbackForClassname
properties propagation :分为
MANDATORY,NESTED,NEVER,NOT_SUPPORTED,REQUIRED,REQUIRED_NEW,SUPPORTS
最常用的是 REQUIRED 如果当前没有Transaction ,则创建一个;REQUIRED_NEW则是直接创建新的事物,挂起当前事务。
NESTED ,嵌套事务处理,回滚到保存点操作,不常用。
properties readOnly 不容许进行删除,插入,更新数据库的操作,一般是提高性能之用。
properties rollbackFor 回滚原因设置,默认是RuntimeException ,一般不用设。
大多数情况下,事务管理都是XML 配置。
(3):HibernateTemplate , HibernateCallback ,HibernateDaoSupport(不重要);
HibernateTemplate 用来简化如try catch finally 这些代码块 ,实现类org.springframework.orm.hibernate3.HibernateTemplate ,需要注入 SessionFactory 类。
======================================================================
<1>设计模式: Template Method
<2>Callback : 回调/钩子函数
<3>第一种:(建议)
a.在spring中初始化HibernateTemplate,注入sessionFactory
b.DAO 里注入 HibernateTemplate
c.save 写 hibernateTemplate.save();
可以写一个SuperDao 来注入HibernateTemplate,然后其他Dao来继承 。。。
<4>第二种:(不常用)
a.从HibernateDaoSupport继承
b.必须写在XML中,无法使用Annotation,因为set方法在父类中,且是final的。
======================================================================
待续 ,继续学习补充中 。