M87星云

导航

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());
}

}
运行结果,并检查数据是否回滚,如果数据库没有插入数据,表示配置成功。

 

 

 

 




posted on 2021-05-25 19:24  挽留匆匆的美丽  阅读(81)  评论(0)    收藏  举报