三个核心接口
实现类
配置文件
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-4.3.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-4.3.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-4.3.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-4.3.xsd">
<!--导入外面xml-->
<import resource="classpath:applicationContext-aspectj.xml"/>
<!--配置事务管理的模板 ================================= 开始=====================================-->
<!--编程式事务侵入到了业务代码里面,但是提供了更加详细的事务管理;而声明式事务由于基于AOP,
所以既能起到事务管理的作用,又可以不影响业务代码的具体实现-->
<!--1.编程式事务管理 允许用户在代码中精确定义事务的边界-->
<!-- <bean id="transactionTemplate" class="org.springframework.transaction.support.TransactionTemplate">
<property name="transactionManager" ref="transactionManager"></property>
<!–定义事务隔离级别 , -1表示数据库默认使用隔离级别–>
<!–isolationLevelName属性名有问题????–>
<property name="isolationLevelName" value="ISOLATION_DEFAULT"></property>
<property name="propagationBehaviorName" value="PROPAGATION_REQUIRED"></property>
</bean>-->
<context:annotation-config />
<context:component-scan base-package="com.jidongcloud" />
<!--在Spring配置文件中定义事务管理器-->
<!--调用链路:
DataSourceTransactionManager========>javax.sql.DataSource==========>java.sql.Connection, rollback()回滚事务
,commit()提交事务
-->
<!--DataSourceTransactionManager通过调用 java.sql.Connection来管理事务
这里有我们熟悉的
void setAutoCommit(boolean autoCommit) throws SQLException;
void commit() throws SQLException; 和 rollback();
-->
<!--通过dataSource属性指定需要事务管理的单个javax.sql.DataSource对象-->
<!-- DataSource Connection getConnection(String username, String password)
throws SQLException;-->
<!--定义基于Mybatis,JDBC的DataSource声明式事务管理器-->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<!--这里指定数据源, 可以是druid数据库连接池-->
<property name="dataSource" ref="myDataSource"/>
</bean>
<!--以下是了解内容-->
<!--Jdo事务管理器 ,此外还有 Hibernate/Jpa事务管理器-->
<!-- <bean id="txManager-jdb" class="org.springframework.orm.jdo.JdoTransactionManager">
<!–通过persistenceManagerFactory 指定事务管理的javax.jdo.persistenceManagerFactory对象–>
<property name="persistenceManagerFactory" ref="persistenceManagerFactory"/>
</bean>-->
<!--
<bean id="sessionFactory"
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="configLocation" value="classpath:hibernate.cfg.xml" />
<property name="configurationClass" value="org.hibernate.cfg.AnnotationConfiguration" />
</bean>
// 定义事务管理器(声明式的事务)
<bean id="transactionManager"
class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory" />
</bean>
-->
<!--2.1.声明式事务管理:基于tx和aop命名空间的xml配置文件。而声明式事务(基于AOP)有助于用户将操作与事务规则进行解耦。-->
<tx:advice id="advice" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="addStudent" propagation="REQUIRED" isolation="DEFAULT" />
</tx:attributes>
</tx:advice>
<aop:config>
<!--使用tx标签配置的拦截器-->
<aop:pointcut id="interceptorPointCuts" expression="execution(* com.jidongcloud.transaction.servicce.StudentServiceImpl.addStudent(..))"/>
<aop:advisor advice-ref="advice" pointcut-ref="interceptorPointCuts"/>
</aop:config>
<!--2.2.声明式事务管理:基于@Transactional注解。而声明式事务(基于AOP)有助于用户将操作与事务规则进行解耦。-->
<!-- <tx:annotation-driven transaction-manager="transactionManager"/>-->
<!--配置事务管理的模板 ================================= 结束=====================================-->
<!-- 指定属性配置文件的位置
location:指定属性配置文件的位置,使用classpath:表示类路径
-->
<context:property-placeholder location="classpath:jdbc.properties"/>
<!-- 声明数据源DataSource, 使用druid -->
<bean id="myDataSource" class="com.alibaba.druid.pool.DruidDataSource"
init-method="init" destroy-method="close" >
<!--
使用属性配置文件中的数据, 语法格式: ${key}
-->
<property name="url" value="${jdbc.url}" />
<property name="username" value="${jdbc.username}" />
<property name="password" value="${jdbc.password}" />
</bean>
<!-- 声明SqlSessionFactoryBean ,创建SqlSessionFactory-->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<!-- 指定数据源DataSource -->
<property name="dataSource" ref="myDataSource" />
<!-- 指定mybatis的主配置文件
Resource类型,赋值使用value ,spring会读取文件,转为Resource类型
classpath:指定到类路径中找配置文件
-->
<property name="configLocation" value="classpath:mybatis.xml" />
</bean>
<!-- 声明mybatis的扫描器对象,创建Dao接口的实现类对象 -->
<!--
1.通过属性sqlSessionFactoryBeanName,能获取到SqlSessionFactory
2.通过SqlSessionFactory.openSession(),得到SqlSession对象
for(接口:com.bjpowernode.dao所有接口){
接口的实现类对象 = 使用sqlSession.getMapper(接口.class);
把创建好的对象放入到spring的容器中,springMap.put(接口的首字母小写,接口的实现类对象)
}
-->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<!-- 指定SqlSessionFactory对象 -->
<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory" />
<!-- 指定Dao接口的包名 -->
<property name="basePackage" value="com.jidongcloud.transaction.dao" />
</bean>
<!-- 声明Service对象 -->
<bean id="studentService" class="com.jidongcloud.transaction.servicce.StudentServiceImpl">
<!--service接口首字母小写-->
<property name="stuDao" ref="studentDao"/>
</bean>
</beans>
:
可以参考这篇博文