一、引入依赖

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.william</groupId><artifactId>spring_day04_05_tx_aop_xml</artifactId><version>1.0-SNAPSHOT</version><properties><maven.compiler.source>1.8</maven.compiler.source><maven.compiler.target>1.8</maven.compiler.target></properties><dependencies><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.47</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-context-support</artifactId><version>5.0.2.RELEASE</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-test</artifactId><version>5.0.2.RELEASE</version></dependency><dependency><groupId>com.mchange</groupId><artifactId>c3p0</artifactId><version>0.9.5.2</version></dependency><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version></dependency><dependency><groupId>commons-dbutils</groupId><artifactId>commons-dbutils</artifactId><version>1.4</version></dependency><dependency><groupId>cglib</groupId><artifactId>cglib</artifactId><version>2.2.2</version></dependency><dependency><groupId>org.aspectj</groupId><artifactId>aspectjweaver</artifactId><version>1.8.9</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-jdbc</artifactId><version>5.0.2.RELEASE</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-tx</artifactId><version>5.0.2.RELEASE</version></dependency></dependencies>
</project>

二、配置xml文件

1.开启注解扫描

2 创建数据源SpringdataSource

3 引入属性文件


4、 创建JdbcTemplate对象

5、创建事务管理器对象: 增强(通知)

6 事务增强:对方法的过滤


name: 方法名,可以使用通配符的方式配置
propagation: 传播的行为,查询方法SUPPORTS, 增删改方法:REQUIRED
(REQUIRED:如果当前没有事务,就新建一个事务,如果已经存在一个事务中,加入到这个事务中。一般的选 择(默认值)
SUPPORTS:支持当前事务,如果当前没有事务,就以非事务方式执行(没有事务) )
isolation: 隔离级别:一般选择数据库默认的隔离级别(一般不用配置)
read-only: 只读,查询使用只读操作,增删改使用非只读操作
time-out: 超时的时间定义,默认-1 ,永不超时(一般不用配置)

7配置aop

<?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"><!--开启注解扫描--><context:component-scan base-package="com.william"></context:component-scan><!--创建dataSource--><bean id="SpringdataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"><property name="driverClassName" value="${jdbc.driverClass}"></property><property name="url" value="${jdbc.jdbcUrl}"></property><property name="username" value="${jdbc.user}"></property><property name="password" value="${jdbc.password}"></property></bean><!--引入属性文件--><context:property-placeholder location="classpath:db.properties"></context:property-placeholder><!--创建JdbcTemplate对象--><bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"><constructor-arg name="dataSource" ref="SpringdataSource"></constructor-arg></bean><!--创建事务管理器对象: 增强(通知)--><bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"><!--操作事务需要连接对象,连接对象在连接池中(数据源)--><property name="dataSource" ref="SpringdataSource"></property></bean><!--事务增强:对方法的过滤--><tx:advice id="txAdvice"  transaction-manager="transactionManager"><tx:attributes><tx:method name="*"/></tx:attributes><!--<tx:method name="insert*"></tx:method>--><!--<tx:method name="update*"></tx:method>--><!--<tx:method name="del*"></tx:method>--><!--<tx:method name="add*"></tx:method>--><!--<tx:method name="transfer"></tx:method>--><!--name="*" 其他方法--><!--<tx:method name="*" propagation="SUPPORTS" read-only="true"></tx:method>--><!--name: 方法名,可以使用通配符的方式配置propagation: 传播的行为,查询方法SUPPORTS, 增删改方法:REQUIREDisolation: 隔离级别:一般选择数据库默认的隔离级别(一般不用配置)read-only: 只读,查询使用只读操作,增删改使用非只读操作time-out: 超时的时间定义,默认-1 ,永不超时(一般不用配置)--><!--非事务运行--></tx:advice><!--配置aop--><aop:config><!--切入点表达式--><aop:pointcut id="pc" expression="execution(* com.itheima.service.impl.*.*(..))"></aop:pointcut><!--织入--><aop:advisor advice-ref="txAdvice" pointcut-ref="pc" ></aop:advisor></aop:config><!--声明式事务管理 - 结束--><!--编程式事务管理: 在业务层字节编写事务 -->
</beans>

二、Class文件

1.目录结构

2.AccountDaoImpl 代码

package com.william.Dao.Impl;import com.william.Dao.AccountDao;
import com.william.domain.Account;import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanHandler;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Repository;import java.sql.SQLException;
import java.util.List;/*** @author :lijunxuan* @date :Created in 2019/5/27  16:00* @description :* @version: 1.0*/
@Repository
public class AccountDaoImpl implements AccountDao {@AutowiredJdbcTemplate jdbcTemplate;@Overridepublic Account findByUserName(String username ) {String sql="select * from account where name = ?";Account account = jdbcTemplate.queryForObject(sql, new BeanPropertyRowMapper<>(Account.class), username);return account;}@Overridepublic void Update(Account account) {String sql =" update account set money = ? where id =?";Object [] params= {account.getMoney(),account.getId()};jdbcTemplate.update(sql,params);}
}

3.AccountServiceImpl


AccountServiceImpl代码:

package com.william.service.Impl;import com.william.Dao.AccountDao;
import com.william.domain.Account;
import com.william.service.AccountService;import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;/*** @author :lijunxuan* @date :Created in 2019/5/27  16:14* @description :* @version: 1.0*/
@Service
public class AccountServiceImpl implements AccountService {@AutowiredAccountDao accountDao;@Overridepublic void transfer(String FromMoney, String ToMoney, Float money) {//开启事务:transactionManager//查询账户名称 两个账户名称Account FromuserName = accountDao.findByUserName(FromMoney);Account ToUserName = accountDao.findByUserName(ToMoney);//修改金额FromuserName.setMoney(FromuserName.getMoney()-money);ToUserName.setMoney(ToUserName.getMoney()+money);int i=1/0;//修改账户表accountDao.Update(FromuserName);accountDao.Update(ToUserName);}
}

3.TestTrasfer


代码TestTrasfer
package com.william;

import com.william.service.AccountService;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Repository;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

/**

  • @author :lijunxuan
  • @date :Created in 2019/5/27 16:22
  • @description :
  • @version: 1.0
    */
    @Component
    @RunWith(SpringJUnit4ClassRunner.class)
    @ContextConfiguration(“classpath:applicationContext.xml”)
    public class TestTrasfer {
    @Autowired
    AccountService accountService;
    @Test
    public void testTrasferMoney(){
    accountService.transfer(“william”,“william-Li”,500f);
    }
    }

Spring基于 XML 的声明式事务控制(配置方式)相关推荐

  1. spring基于XML的声明式事务控制-配置步骤

    <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://mave ...

  2. 【spring】spring基于xml的声明式事务控制

    结构 domain package com.itheima.domain;import java.io.Serializable;public class Account implements Ser ...

  3. 【Spring】spring基于注解的声明式事务控制

    结构 domin package com.itheima.domain;import java.io.Serializable;public class Account implements Seri ...

  4. spring基于注解的声明式事务控制

    <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://mave ...

  5. Spring的编程式事务声明式事务 基于注解的声明式事务控制

    文章目录 Spring中编程式事务 基于XML的声明式事务控制 基于注解的声明式事务控制 Spring集成web环境 Spring中编程式事务 Spring的事务控制可以分为编程式事务控制和声明式事务 ...

  6. 【java学习之路】(java框架)010.声明式事务控制

    声明式事务控制 编程式事务控制相关对象 PlatformTransactionManager* PlatformTransactionManager 接口是 spring 的事务管理器,它里面提供了我 ...

  7. JAVA日记之SpringJdbcTemplate/声明式事务控制 ----喝最烈的酒.

    JdbcTemplate基本使用 01-JdbcTemplate基本使用-概述 JdbcTemplate是spring框架中提供的一个对象,是对原始繁琐的Jdbc API对象的简单封装.spring框 ...

  8. [JAVAEE]实验06:基于XML和基于注解的声明式事务管理方式模拟银行转账程序

    一.实验目的: 熟练掌握声明式事务管理. 二.实验内容: 编写一个模拟银行转账的程序,要求在转账时通过Spring对事务进行控制. 三.实验要求: 分别使用基于XML和基于注解的声明式事务管理方式来实 ...

  9. 注解配置声明式事务控制解析

    ①使用 @Transactional 在需要进行事务控制的类或是方法上修饰,注解可用的属性同 xml 配置方式,例如隔离级别.传播行为等. ②注解使用在类上,那么该类下的所有方法都使用同一套注解参数配 ...

最新文章

  1. 中国免检制度可能全面废止 产品免检办法已废除
  2. 社交系统/社群系统ThinkSNS+ alpha.2 版本发布!
  3. 第三章、Data语意学
  4. 函数--函数的快速体验
  5. mysql数据库rp集群,使用MySQL-Cluster搭建MySQL数据库集群
  6. python socket udp_python网络-Socket之udp编程(24)
  7. 概率论 —— 数学期望
  8. 简单的Swagger生产环境中屏蔽
  9. QQ连连看外挂开发过程记录
  10. unity自动生成敌人_unity 2d AI 敌人 自动追踪(1)
  11. 性能优化,进无止境---内存篇
  12. 洛谷P1195 口袋的天空
  13. 智能制造专业就业方向
  14. linux 重命名文件夹
  15. 初学三分法之考研路茫茫——早起看书
  16. 全闪存助攻:数据存储迎来又一个“新元年”
  17. Java中角度和弧度的转换,三角函数,反三角函数
  18. 【spring aop】连接点(Jointpoint)、切入点(Pointcut)、增强(Advice)、方面/切面(Aspect、Advisor)
  19. ActiveSync与模拟器连接
  20. Java分布式全局ID(一)

热门文章

  1. jmeter 采样器作用_实施自定义JMeter采样器
  2. javaone_JavaOne 2015 –提交技巧和建议
  3. maven 可执行 jar_Maven提示:有关可执行jar的所有信息
  4. 使用Java 8 Lambda表达式将实体映射到DTO
  5. API网关和AWS Lambda进行身份验证
  6. 在单个try-with-resources语句中仔细指定多个资源
  7. 在Microsoft Azure上运行Eclipse MicroProfile
  8. java文件和xml文件_用Java分割大型XML文件
  9. 5个常见的Hibernate异常及其解决方法
  10. mac memcached_Mac OS X上的Java Memcached