事务管理
非注解方式
<?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.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd"> <!-- 开启注解扫描 (1)到包里面扫描类、方法、属性上面是否有注解--> <context:annotation-config></context:annotation-config> <context:component-scan base-package="com.keduox.*"></context:component-scan> <!-- 配置c3p0连接池 --> <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"> <!-- 注入属性值 --> <property name="driverClass" value="com.mysql.jdbc.Driver"></property> <property name="jdbcUrl" value="jdbc:mysql:///spring_day03"></property> <property name="user" value="root"></property> <property name="password" value="root"></property> </bean> <!-- 创建jdbcTemplate对象 --> <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"> <!-- 把dataSource传递到模板对象里面 --> <property name="dataSource" ref="dataSource"></property> </bean> <!-- 第一步 配置事务管理器 --> <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <!-- 注入dataSource 指定对哪个数据库操作--> <property name="dataSource" ref="dataSource"></property> </bean> <!-- 第二步 配置事务增强 --> <tx:advice id="txadvice" transaction-manager="transactionManager"> <!-- 做事务操作 --> <tx:attributes> <!-- 设置进行事务操作的方法匹配规则 --> <!--name可以直接写类名 或者account*--> <tx:method name="account*" propagation="REQUIRED"/> </tx:attributes> </tx:advice> <!-- 第三步 配置切面 --> <aop:config> <!-- 切入点 --> <aop:pointcut expression="execution(* com.keduox.service.OrdersService.*(..))" id="pointcut1"/> <!-- 切面 --> <!--advice-ref=""增强 pointcut-ref="" 切入点 把哪个增强用到哪一个切入点上--> <aop:advisor advice-ref="txadvice" pointcut-ref="pointcut1"/> </aop:config> </beans>注解方式
<?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:tx="http://www.springframework.org/schema/tx" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd"> <!-- 开启注解扫描 (1)到包里面扫描类、方法、属性上面是否有注解--> <context:annotation-config></context:annotation-config> <context:component-scan base-package="com.keduox.*"></context:component-scan> <!-- 配置c3p0连接池 --> <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"> <!-- 注入属性值 --> <property name="driverClass" value="com.mysql.jdbc.Driver"></property> <property name="jdbcUrl" value="jdbc:mysql:///spring_day03"></property> <property name="user" value="root"></property> <property name="password" value="root"></property> </bean> <!-- 创建jdbcTemplate对象 --> <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"> <!-- 把dataSource传递到模板对象里面 --> <property name="dataSource" ref="dataSource"></property> </bean> <!-- 第一步 配置事务管理器 --> <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <!-- 注入dataSource 指定对哪个数据库操作--> <property name="dataSource" ref="dataSource"></property> </bean> <!--开启事务注解--> <tx:annotation-driven transaction-manager="transactionManager"/> </beans>@Service public class OrdersService { @Autowired private OrdersDao ordersDao; // public void setOrdersDao(OrdersDao ordersDao) { // this.ordersDao = ordersDao; // } @Transactional(readOnly = true) //通过注解方式 将这个方法设置为只读 public void xxxxx() {Spring和Mybatis整合
方式一:通过MapperFactoryBean创建代理对象
此方法问题:
方式2:通过MapperScannerConfigurer进行mapper扫描(建议使用)需要针对每个mapper进行配置,麻烦。