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

一、引入依赖



    4.0.0

    com.william
    spring_day04_05_tx_aop_xml
    1.0-SNAPSHOT

    
        1.8
        1.8
    
    
        
            mysql
            mysql-connector-java
            5.1.47
        
        
            org.springframework
            spring-context-support
            5.0.2.RELEASE
        
        
            org.springframework
            spring-test
            5.0.2.RELEASE
        
        
            com.mchange
            c3p0
            0.9.5.2
        
        
            junit
            junit
            4.12
        
        
            commons-dbutils
            commons-dbutils
            1.4
        
        
            cglib
            cglib
            2.2.2
        
        
            org.aspectj
            aspectjweaver
            1.8.9
        
        
            org.springframework
            spring-jdbc
            5.0.2.RELEASE
        
        
            org.springframework
            spring-tx
            5.0.2.RELEASE
        
    

二、配置xml文件

1.开启注解扫描

开启注解扫描

2 创建数据源SpringdataSource

Spring基于 XML 的声明式事务控制(配置方式)_第1张图片

3 引入属性文件

引入属性文件db.properties
Spring基于 XML 的声明式事务控制(配置方式)_第2张图片

4、 创建JdbcTemplate对象

Spring基于 XML 的声明式事务控制(配置方式)_第3张图片

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

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

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

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

7配置aop

Spring基于 XML 的声明式事务控制(配置方式)_第5张图片



    
    
    
    
        
        
        
        
    
    
  
    
   
       
   
    
    
        
       
    

    
    
        
            
        
        
        
        
        
        
        
        
        
        
    
    
    
        
        
        
        
    

    

    

二、Class文件

1.目录结构

Spring基于 XML 的声明式事务控制(配置方式)_第6张图片

2.AccountDaoImpl 代码

Spring基于 XML 的声明式事务控制(配置方式)_第7张图片

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 {
    @Autowired
    JdbcTemplate jdbcTemplate;
    @Override
    public Account findByUserName(String username ) {
        String sql="select * from account where name = ?";

        Account account = jdbcTemplate.queryForObject(sql, new BeanPropertyRowMapper<>(Account.class), username);


        return account;
    }

    @Override
    public void Update(Account account) {
     String sql =" update account set money = ? where id =?";
     Object [] params= {account.getMoney(),account.getId()};

            jdbcTemplate.update(sql,params);

    }
}

3.AccountServiceImpl

Spring基于 XML 的声明式事务控制(配置方式)_第8张图片
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 {

    @Autowired
    AccountDao accountDao;
    @Override
    public 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

Spring基于 XML 的声明式事务控制(配置方式)_第9张图片
代码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框架)