1. Spring 指定datasource
a) 参考文档,找dbcp.BasicDataSource
i. c3p0
ii. dbcp
iii. proxool
b) 在DAO或者Service中注入dataSource
c) 在Spring中可以使用PropertyPlaceHolderConfigure来读取Properties文件的内容
2. Spring整合Hibernate
a) <bean .. AnnotationSessionFactoryBean>
i. <property dataSource
ii. <annotatedClasses
b) 引入hibernate 系列jar包
c) User上加Annotation
d) UserDAO或者UserServie 注入SessionFactory
3. 声明式的事务管理
a) 事务加在DAO层还是Service层? Service层
b) annotation
i. 加入annotation.xsd
ii. 加入txManager bean
iii. <tx:annotation-driven
iv. 在需要事务的方法上加:@Transactional
v. 需要注意,使用SessionFactory.getCurrentSession不要使用OpenSession
c) @Transactional详解
i. 什么时候rollback
1. 运行期异常,非运行期异常不会触发rollback
2. 必须uncheck (没有catch)
3. 不管什么异常,只要你catch了,spring就会放弃管理
4. 事务传播特性:propagation_required
5. read_only
d) xml(推荐,可以同时配置好多方法)
i. <bean txmanager
ii. <aop:config
1. <aop:pointcut
2. <aop:advisor pointcut-ref advice-ref
iii. <tx:advice: idtransaction-manager =
例子:
<bean id="txManager"
class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory" />
</bean>
<tx:annotation-driven transaction-manager="txManager" />
<aop:config>
<aop:pointcut expression="execution(public *com.bjsxt.service..*.*(..))"
id="bussinessService"/>
<aop:advisor advice-ref="txAdvice" pointcut-ref="bussinessService"/>
</aop:config>
<tx:advice id="txAdvice" transaction-manager="txManager">
<!--the transactional semantics... -->
<tx:attributes>
<!--all methods starting with 'get' are read-only -->
<tx:method name="get*" read-only="true"/>
<!--other methods use the default transaction settings (see below) -->
<tx:method name="add*" propagation="REQUIRED"/>
</tx:attributes>
</tx:advice>
e) packageToScan
spring整合hibernate的时候使用packagesToScan属性,可以让spring自动扫描对应包下面的实体类
<property name="packageToScan">
<list>
<value>com.bjsxt.model </value>
</list>
</property>
f) HibernateTemplate、HibernateCallback、HibernateDaoSupport(不重要)介绍
i. 设计模式:TemplateMethod
ii. Callback:回调/钩子函数
使用HibernateTemplate
<bean id="hibernateTemplate" class="org.springframework.orm.hibernate3.HibernateTemplate">
<property name="sessionFactory" ref="sessionFactory"></property>
</bean>
使用HibernateDaoSupport
第一种:(建议)
1. 在spring中初始化HibernateTemplate,注入sessionFactory
2. DAO里注入HibernateTemplate
3. save写getHibernateTemplate.save();
第二种:
4. 从HibernateDaoSupport继承
5. 必须写在xml文件中,无法使用Annotation,因为set方法在父类中,而且是final的