我是比较讨厌xml的人,没有强类型,很多配置出错,包括xdoclet都无法检查。刚好现在的主流框架总算开始支持annotation了,所以玩了一下配置,供参考:
hibernate3.05
hibernate-annotations-3.0beta2
spring1.21

几个配置文件如下:
spring-database.xml(这个文件基本不变,有新的dao在底下加入一行即可。
hibernate3.0+ejb3 annotaion配置实战+spring1.21 annotation事务控制<?xml version="1.0" encoding="UTF-8"?>
hibernate3.0+ejb3 annotaion配置实战+spring1.21 annotation事务控制
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
hibernate3.0+ejb3 annotaion配置实战+spring1.21 annotation事务控制
hibernate3.0+ejb3 annotaion配置实战+spring1.21 annotation事务控制
<beans>
hibernate3.0+ejb3 annotaion配置实战+spring1.21 annotation事务控制
hibernate3.0+ejb3 annotaion配置实战+spring1.21 annotation事务控制    
<!-- ========================= RESOURCE DEFINITIONS ========================= -->
hibernate3.0+ejb3 annotaion配置实战+spring1.21 annotation事务控制
hibernate3.0+ejb3 annotaion配置实战+spring1.21 annotation事务控制    
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
hibernate3.0+ejb3 annotaion配置实战+spring1.21 annotation事务控制        
<property name="driverClassName"><value>${jdbc.driverClassName}</value></property>
hibernate3.0+ejb3 annotaion配置实战+spring1.21 annotation事务控制        
<property name="url"><value>${jdbc.url}</value></property>
hibernate3.0+ejb3 annotaion配置实战+spring1.21 annotation事务控制        
<property name="username"><value>${jdbc.username}</value></property>
hibernate3.0+ejb3 annotaion配置实战+spring1.21 annotation事务控制        
<property name="password"><value>${jdbc.password}</value></property>
hibernate3.0+ejb3 annotaion配置实战+spring1.21 annotation事务控制    
</bean>
hibernate3.0+ejb3 annotaion配置实战+spring1.21 annotation事务控制
hibernate3.0+ejb3 annotaion配置实战+spring1.21 annotation事务控制    
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
hibernate3.0+ejb3 annotaion配置实战+spring1.21 annotation事务控制        
<property name="configurationClass"><value>org.hibernate.cfg.AnnotationConfiguration</value></property>
hibernate3.0+ejb3 annotaion配置实战+spring1.21 annotation事务控制           
<property name="dataSource"><ref bean="dataSource"/></property>
hibernate3.0+ejb3 annotaion配置实战+spring1.21 annotation事务控制           
<property name="configLocation"><value>/hibernate.cfg.xml</value></property>
hibernate3.0+ejb3 annotaion配置实战+spring1.21 annotation事务控制   
</bean>
hibernate3.0+ejb3 annotaion配置实战+spring1.21 annotation事务控制
hibernate3.0+ejb3 annotaion配置实战+spring1.21 annotation事务控制    
<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
hibernate3.0+ejb3 annotaion配置实战+spring1.21 annotation事务控制           
<property name="sessionFactory"><ref bean="sessionFactory"/></property>
hibernate3.0+ejb3 annotaion配置实战+spring1.21 annotation事务控制           
<property name="dataSource"><ref bean="dataSource"/></property>
hibernate3.0+ejb3 annotaion配置实战+spring1.21 annotation事务控制    
</bean>
hibernate3.0+ejb3 annotaion配置实战+spring1.21 annotation事务控制
hibernate3.0+ejb3 annotaion配置实战+spring1.21 annotation事务控制    
<bean class="org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator"/>
hibernate3.0+ejb3 annotaion配置实战+spring1.21 annotation事务控制
hibernate3.0+ejb3 annotaion配置实战+spring1.21 annotation事务控制    
<bean class="org.springframework.transaction.interceptor.TransactionAttributeSourceAdvisor">
hibernate3.0+ejb3 annotaion配置实战+spring1.21 annotation事务控制        
<property name="transactionInterceptor"><ref bean="transactionInterceptor"/></property>
hibernate3.0+ejb3 annotaion配置实战+spring1.21 annotation事务控制    
</bean>
hibernate3.0+ejb3 annotaion配置实战+spring1.21 annotation事务控制
hibernate3.0+ejb3 annotaion配置实战+spring1.21 annotation事务控制    
<bean id="transactionInterceptor" class="org.springframework.transaction.interceptor.TransactionInterceptor">
hibernate3.0+ejb3 annotaion配置实战+spring1.21 annotation事务控制        
<property name="transactionManager"><ref bean="transactionManager"/></property>
hibernate3.0+ejb3 annotaion配置实战+spring1.21 annotation事务控制        
<property name="transactionAttributeSource">
hibernate3.0+ejb3 annotaion配置实战+spring1.21 annotation事务控制            
<bean class="org.springframework.transaction.annotation.AnnotationTransactionAttributeSource"/>
hibernate3.0+ejb3 annotaion配置实战+spring1.21 annotation事务控制        
</property>
hibernate3.0+ejb3 annotaion配置实战+spring1.21 annotation事务控制    
</bean>
hibernate3.0+ejb3 annotaion配置实战+spring1.21 annotation事务控制
hibernate3.0+ejb3 annotaion配置实战+spring1.21 annotation事务控制    
<!-- ========================= DAO DEFINITIONS ========================= -->
hibernate3.0+ejb3 annotaion配置实战+spring1.21 annotation事务控制
hibernate3.0+ejb3 annotaion配置实战+spring1.21 annotation事务控制    
<bean id="testDao" class="org.steeven.TestDaoImpl">
hibernate3.0+ejb3 annotaion配置实战+spring1.21 annotation事务控制         
<property name="sessionFactory">
hibernate3.0+ejb3 annotaion配置实战+spring1.21 annotation事务控制            
<ref bean="sessionFactory"/>
hibernate3.0+ejb3 annotaion配置实战+spring1.21 annotation事务控制        
</property>
hibernate3.0+ejb3 annotaion配置实战+spring1.21 annotation事务控制    
</bean>

hibernate3.0+ejb3 annotaion配置实战+spring1.21 annotation事务控制    <!-- ========================= DAO DEFINITIONS ========================= -->
     <bean >

hibernate.cfg.xml
hibernate3.0+ejb3 annotaion配置实战+spring1.21 annotation事务控制<?xml version="1.0" encoding="UTF-8"?>
hibernate3.0+ejb3 annotaion配置实战+spring1.21 annotation事务控制
<!DOCTYPE hibernate-configuration PUBLIC
hibernate3.0+ejb3 annotaion配置实战+spring1.21 annotation事务控制        "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
hibernate3.0+ejb3 annotaion配置实战+spring1.21 annotation事务控制        "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"
>
hibernate3.0+ejb3 annotaion配置实战+spring1.21 annotation事务控制
<hibernate-configuration>
hibernate3.0+ejb3 annotaion配置实战+spring1.21 annotation事务控制    
<session-factory>
hibernate3.0+ejb3 annotaion配置实战+spring1.21 annotation事务控制        
<property name="hibernate.hbm2ddl.auto">create-drop</property>
hibernate3.0+ejb3 annotaion配置实战+spring1.21 annotation事务控制        
<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
hibernate3.0+ejb3 annotaion配置实战+spring1.21 annotation事务控制        
<property name="hibernate.cglib.use_reflection_optimizer">true</property>
hibernate3.0+ejb3 annotaion配置实战+spring1.21 annotation事务控制        
<property name="default-lazy">false</property>
hibernate3.0+ejb3 annotaion配置实战+spring1.21 annotation事务控制        
hibernate3.0+ejb3 annotaion配置实战+spring1.21 annotation事务控制        
<!-- 用于hibernate持久化的对象" -->
hibernate3.0+ejb3 annotaion配置实战+spring1.21 annotation事务控制        
<mapping class="org.steeven.Test"/>
hibernate3.0+ejb3 annotaion配置实战+spring1.21 annotation事务控制        
hibernate3.0+ejb3 annotaion配置实战+spring1.21 annotation事务控制          
<listener type="pre-update" class="org.hibernate.validator.event.ValidatePreUpdateEventListener"/>
hibernate3.0+ejb3 annotaion配置实战+spring1.21 annotation事务控制          
<listener type="pre-insert" class="org.hibernate.validator.event.ValidatePreInsertEventListener"/>
hibernate3.0+ejb3 annotaion配置实战+spring1.21 annotation事务控制    
</session-factory>
hibernate3.0+ejb3 annotaion配置实战+spring1.21 annotation事务控制
</hibernate-configuration>
hibernate3.0+ejb3 annotaion配置实战+spring1.21 annotation事务控制

上面两个就是配置文件的全部了。下面看看代码:
TestDao.java(注意,就是个普通的dao,事务控制由调用者标注)
}
Test.java
hibernate3.0+ejb3 annotaion配置实战+spring1.21 annotation事务控制@Entity
hibernate3.0+ejb3 annotaion配置实战+spring1.21 annotation事务控制@Proxy(lazy 
= false)
}

TestServiceImpl.java(这个类也是从spring中取得,关键就在@Transactional标记)
hibernate3.0+ejb3 annotaion配置实战+spring1.21 annotation事务控制@Transactional
}

现在很清爽了,所有的事务控制只需要加几个@Transaction标记。感谢hibernate+spring
另外,hibernate还提供了基于标记的参数校验,请参考下面文档:

参考资源:
spring1.21自带smaples/jpetstore
http://www.hibernate.org/hib_docs/annotations/reference/en/html_single/

初次玩spring&hibernate,请多指教!

相关文章: