a) 參考文檔,找dbcp.BasicDataSource mysql
i. c3p0 spring
ii. dbcpsql
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> <property name="driverClassName" value="com.mysql.jdbc.Driver" /> <property name="url" value="jdbc:mysql://localhost:3306/spring" /> <property name="username" value="root" /> <property name="password" value="bjsxt" /> </bean>
iii. proxool express
b) 在DAO或者Service中注入dataSource apache
c) 在Spring中能夠使用PropertyPlaceHolderConfigure來讀取Properties文件的內容 設計模式
jdbc.properties session
jdbc.driverClassName=com.mysql.jdbc.Driver jdbc.url=jdbc:mysql://localhost:3306/spring jdbc.username=root jdbc.password=root
<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> <property name="locations"> <value>classpath:jdbc.properties</value> </property> </bean> <bean id="dataSource" destroy-method="close" class="org.apache.commons.dbcp.BasicDataSource"> <property name="driverClassName" value="${jdbc.driverClassName}" /> <property name="url" value="${jdbc.url}" /> <property name="username" value="${jdbc.username}" /> <property name="password" value="${jdbc.password}" /> </bean>
a) <bean .. AnnotationSessionFactoryBean>dom
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean"> <property name="dataSource" ref="dataSource" /> <property name="annotatedClasses"> <list> <value>cn.wym.hibernate.domain.Users </value> </list> </property>
</bean>
i. <property dataSource 函數
ii. <annotatedClasses ui
b) 引入hibernate 系列jar包
c) User上加Annotation
d) UserDAO或者UserServie 注入SessionFactory
e) jar包問題一個一個解決
a) 事務加在DAO層仍是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: id transaction-manager =
<bean id="txManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager"> <property name="sessionFactory" ref="sessionFactory" /> </bean> <aop:config> <aop:pointcut id="bussinessService" expression="execution(public * com.bjsxt.service..*.*(..))" /> <aop:advisor pointcut-ref="bussinessService" advice-ref="txAdvice" /> </aop:config> <tx:advice id="txAdvice" transaction-manager="txManager"> <tx:attributes> <tx:method name="getUser" read-only="true" /> <tx:method name="add*" propagation="REQUIRED" /> </tx:attributes> </tx:advice>
e) HibernateTemplate、HibernateCallback、HibernateDaoSupport(不重要)介紹
i. 設計模式:Template Method
ii. Callback:回調/鉤子函數
iii. 第一種:(建議)
1. 在spring中初始化HibernateTemplate,注入sessionFactory
<bean id="hibernateTemplate" class="org.springframework.orm.hibernate3.HibernateTemplate"> <property name="sessionFactory" ref="sessionFactory" /> </bean>
2. DAO裏注入HibernateTemplate
3. save寫getHibernateTemplate.save();
iv. 第二種:
1. 從HibernateDaoSupport繼承
2. 必須寫在xml文件中,沒法使用Annotation,由於set方法在父類中,並且是final的spring整合hibernate的時候使用packagesToScan屬性,能夠讓spring自動掃描對應包下面的實體類。
<property name="packagesToScan"> <list> <value>com.bjsxt.model</value> </list> </property>