1.1、事务管理
基于xml配置的
1.配置事务管理器
jdbc:DataSourceTransactionManager
hibernate:HibernateTransactionManager
<bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"></property>
</bean>
2.事务通知(详情、属性)
<tx:advice id="txAdvice" transaction-manager="txManager">
<tx:attributes>
<tx:method name="add*"/>
<tx:method name="update*"/>
<tx:method name="delete*">
<tx:method name="find*" read-only="true"/>
</tx:attributes>
</tx:advice>
3. AOP编程,ABCD --> ABC
<aop:config>
<aop:advisor advice-ref="txAdvice" pointcut="execution(* com..*.*(..))">
</aop:config>
基于注解的
xml 配置
1.配置事务管理器
<bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"></property>
</bean>
2.将配置事务管理器交予spring管理
<tx:annotation-driven transaction-manager="txManager" proxy-target-class="false"/>
3.目标类上通过注解配置事务详情
@Transactional(propagation=Propagation.REQUIRED, isolation=Isolation.DEFAULT)
1.2、整合Junit
在测试类上
// 让Junit去通知spring加载配置文件
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations="classpath:applicationContext.xml")
// 让spring容器自动进行注入
@Autowired
@Test
1.3、整合web
web.xml 中的配置
1.确定xml位置
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext.xml</param-value>
</context-param>
2.配置spring 监听器,用于加载xml配置文件
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
1.4、整合ssh
1.hibernate po(domain/bean)
2.dao 层:
法一:需要HibernateTemplate,相当于session操作PO类 --> 必须提供setter方法,让spring进行注入 --> 所以xml中必须要配置模板
save() update() delete() saveOrUpdate() find()
法二:继承HibernateDaoSupport,需要注入SessionFactory,底层自动创建模板
dao方法中使用 this.getHibernateTemplate()
3.service 层:spring配置
<!-- 加载配置文件 JdbcInfo.properties
"classpath:" 该前缀表示在src目录下
在配置文件中通过 ${key} 获得配置文件 内容(值)
-->
<context:property-placeholder location="classpath:com/itheima/f_properties/jdbcInfo.properties"/>
<!-- 创建数据源对象,c3p0,需要注入基本四项 -->
<bean id="dataSourceId" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="driverClass" value="${jdbc.driverClass}"></property>
<property name="jdbcUrl" value="${jdbc.jdbcUrl}"></property>
<property name="user" value="${jdbc.user}"></property>
<property name="password" value="${jdbc.password}"></property>
</bean>
<!-- 配置 LocalSessionFactoryBean,获得SessionFactory -->
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource" ref="dataSource"></property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</prop>
<prop key="hibernate.show_sql">true</prop>
<prop key="hibernate.format_sql">true</prop>
<prop key="hibernate.hbm2ddl.auto">update</prop>
<prop key="hibernate.current_session_context_class">thread</prop>
</props>
</property>
<property name="mappingLocations" value="classpath:com/itheima/domain/*.hbm.xml"></property>
</bean>
<!-- dao spring中删除模板,给dao注入SessionFactory -->
<bean id="userDao" class="com.itheima.dao.impl.UserDaoImpl">
<property name="sessionFactory" ref="sessionFactory"></property>
</bean>
<!-- 事务管理 HibernateTransactionManager,需要注入 SessionFactory -->
<bean id="txManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager" >
<property name="sessionFactory" ref="sessionFactory"></property>
</bean>
<!-- 5.2 、事务详情 ,给ABC进行具体的事务设置 -->
<tx:advice id="txAdvice" transaction-manager="txManager">
<tx:attributes>
<tx:method name="register"/>
</tx:attributes>
</tx:advice>
<!-- 5.3、AOP编程,从 ABCD 业务中 筛选出 ABC -->
<aop:config>
<aop:advisor advice-ref="txAdvice" pointcut="execution(* com.itheima.service..*.*(..))"/>
</aop:config>
4.web 层:aciton
使用的是:由struts去创建action
struts.xml 中的 <action name="" class="全限定类名"> 注意:我们看到的好像是struts去创建action,其实底层使用的是spring去创建action
在Action类中,必须提供service名称与spring配置文件一致。(如果【名称】一致,将自动注入)