关于spring整合hibernate的一些概念

最近初学spring,整合hibernate遇到了种种问题,包括sessionfactory的注入;

(1):spring的自带的实现sessionfactory接口的类AnnotationSessionFactoryBean(其实源代码中并没有实现此接口,但是sessionfactory的方法初始化的时候被动态切入到此类当中),beans.xml如下:

<beanid="sessionFactory"class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">

<propertyname="dataSource"ref="dataSource"/>

<propertyname="annotatedClasses">

<list>

<value>com.shelley.model.User</value>

</list>

</property>

<propertyname="hibernateProperties">

<!--<value>

hibernate.dialect=org.hibernate.dialect.MySQLInnoDBDialect

</value>-->

<props>

<propkey="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</prop>

<propkey="hibernate.show_sql">true</prop>

<!--<propkey="hibernate.jdbc.use_get_generated_keys">false</prop>-->

</props>

</property>

</bean>

对以上的配置信息中可以看到:参数1为:dataSource,即注入数据源连接池类,此类同样可以通过spring来指定;参数2为:表映射的实体类的数组;参数3:为注入一些hibernate一些配置参数,由AnnotationSessionFactoryBean的父类中方法publicvoidsetHibernateProperties(PropertieshibernateProperties){

this.hibernateProperties=hibernateProperties;

} 来实现,是一个Properties数据类型 。

(2):Transactionannotationproperties主要分为propagation,isolation,readOnly,timeout,rollbackFor,rollbackForClassname,noRollbackFor,noRollbackForClassname

propertiespropagation:分为

MANDATORY,NESTED,NEVER,NOT_SUPPORTED,REQUIRED,REQUIRED_NEW,SUPPORTS

最常用的是REQUIRED如果当前没有Transaction,则创建一个;REQUIRED_NEW则是直接创建新的事物,挂起当前事务。

NESTED,嵌套事务处理,回滚到保存点操作,不常用。

propertiesreadOnly不容许进行删除,插入,更新数据库的操作,一般是提高性能之用。

propertiesrollbackFor回滚原因设置,默认是RuntimeException,一般不用设。

大多数情况下,事务管理都是XML配置。

(3):HibernateTemplate,HibernateCallback,HibernateDaoSupport(不重要);

HibernateTemplate用来简化如trycatchfinally这些代码块,实现类org.springframework.orm.hibernate3.HibernateTemplate,需要注入SessionFactory类。

======================================================================

<1>设计模式:TemplateMethod

<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的。

======================================================================

待续 ,继续学习补充中 。

相关推荐