05、spring Aop 事务注解入门配置
项目目录结构:

1、导入依赖
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.3.7</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>5.3.7</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>5.3.7</version>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.9.6</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.6</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>5.3.7</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
</dependencies>
2、创建实体类(数据库表以类的属性一致)
public class Account implements Serializable {
    private Integer id;
    private String name;
    private double money;
    public Integer getId() {
        return id;
    }
    public void setId(Integer id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public double getMoney() {
        return money;
    }
    public void setMoney(double money) {
        this.money = money;
    }
    @Override
    public String toString() {
        return "Account{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", money=" + money +
                '}';
    }
}
3、创建JdbcBase类
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
public class BaseDao {
@Autowired
private JdbcTemplate jdbcTemplate;
public JdbcTemplate getJdbcTemplate() {
return jdbcTemplate;
}
}
4、创建DAO
接口:
import com.boat.entity.Account;
import java.util.List;
public interface AccountDao{
int save(Account account);
List<Account> listAccount();
}
实现类:
import com.boat.dao.AccountDao;
import com.boat.dao.base.BaseDao;
import com.boat.entity.Account;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.stereotype.Repository;
import java.util.List;
@Repository
public class AccountDaoImpl extends BaseDao implements AccountDao {
@Override
public int save(Account account) {
Integer flag = getJdbcTemplate().update("insert into account(name,money) values(?,?)",account.getName(),account.getMoney());
return flag;
}
@Override
public List<Account> listAccount() {
return getJdbcTemplate().query("select * from account",new BeanPropertyRowMapper<>(Account.class));
}
}
5、创建service服务
接口:
import com.boat.entity.Account;
import java.util.List;
public interface AccountService {
public abstract int save(Account account);
public abstract List<Account> listAccount();
}
实现类:
@Service
@Transactional(propagation = Propagation.SUPPORTS, readOnly = true)
public class AccountServiceImpl implements AccountService {
@Autowired
private AccountDao accountDao;
public void setAccountDao(AccountDao accountDao) {
this.accountDao = accountDao;
}
@Override
@Transactional(propagation = Propagation.REQUIRED, readOnly = false)
public int save(Account account) {
int falg = accountDao.save(account);
int i = 1 / 0;
return falg;
}
@Override
public List<Account> listAccount() {
return accountDao.listAccount();
}
}
6、配置config配置类
主配置类:
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Import;
import org.springframework.context.annotation.PropertySource;
import org.springframework.transaction.annotation.EnableTransactionManagement;
@Configuration
@ComponentScan("com.boat")
@PropertySource("jdbcconfig.properties")
@Import(value = {JdbcConfiguration.class,TransactionConfigration.class})
@EnableTransactionManagement
public class SupConfiguration {
}
数据源配置类:
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.datasource.DriverManagerDataSource;
import javax.sql.DataSource;
public class JdbcConfiguration {
@Value("${jdbc.driveclass}")
private String driveclass;
@Value("${jdbc.url}")
private String url;
@Value("${jdbc.username}")
private String username;
@Value("${jdbc.password}")
private String password;
@Bean("jdbcTemplate")
public JdbcTemplate createJdbcTemplate(DataSource dataSource){
return new JdbcTemplate(dataSource);
}
@Bean("datasource")
public DataSource createDatasource(){
DriverManagerDataSource dataSource = new DriverManagerDataSource();
dataSource.setDriverClassName(driveclass);
dataSource.setUrl(url);
dataSource.setUsername(username);
dataSource.setPassword(password);
return dataSource;
}
}
配置事务管理器:
import org.springframework.context.annotation.Bean;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import javax.sql.DataSource;
public class TransactionConfigration {
@Bean("transactionManager")
public DataSourceTransactionManager createDataSourceTransactionManager(DataSource dataSource){
return new DataSourceTransactionManager(dataSource);
}
}
7、配置jdbcconfig.properties文件,配置连接数据库的参数
jdbc.driveclass=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/mydb
jdbc.username=xxx
jdbc.password=xxx
8、测试事务
import com.boat.config.SupConfiguration;
import com.boat.entity.Account;
import com.boat.service.AccountService;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = SupConfiguration.class)
public class TestSpring {
@Autowired
private AccountService accountService;
@Test
public void save(){
Account account = new Account();
account.setName("高某");
account.setMoney(1000);
accountService.save(account);
}
@Test
public void list(){
System.out.println(accountService.listAccount());
}
}
运行结果,并检查数据是否回滚,如果数据库没有插入数据,表示配置成功。

 
 
                    
                     
                    
                 
                    
                 
 
         
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号