一.在pom.xml中导入相关的依赖
导入Mybatis中相关的依赖
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.4.3.1</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.47</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
二.配置数据源
spring:
datasource:
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://127.0.0.1:3306/bank?useSSL=true&useUnicode=true&characterEncoding=utf-8
username: root
password: root
三.创建实体类
@Data
@AllArgsConstructor
@NoArgsConstructor
@TableName("acount")
public class Account {
@TableId
private Long id;
private String name;
private float money;
}
四.创建Mapper
@Mapper
public interface AccountMapper extends BaseMapper<Account> {
}
五.创建Service
public interface AccountService {
//用来判断转账是否成功
boolean transfer(String source,String target,float money);
}
六.创建AccountServiceImpl
@Service
public class AccountServiceImpl implements AccountService {
@Autowired(required = false)
private AccountMapper accountMapper;
private Integer i1;
private Integer i2;
@Transactional //开启事务
@Override
public boolean transfer(String source, String target, float money) {
//获取汇款方
QueryWrapper<Account> queryWrapper1 = new QueryWrapper<Account>();
queryWrapper1.eq("name",source);
Account account1 = accountMapper.selectOne(queryWrapper1);
//获取收款方
QueryWrapper<Account> queryWrapper2 = new QueryWrapper<Account>();
queryWrapper2.eq("name",target);
Account account2 = accountMapper.selectOne(queryWrapper2);
//转账
account1.setMoney(account1.getMoney()-money);
i1 = accountMapper.updateById(account1);
//模拟异常
int i=1/0;
account2.setMoney(account2.getMoney()+money);
i2 = accountMapper.updateById(account2);
if(i1>0 && i2>0){
return true;
}else{
return false;
}
}
}
七.创建TestController进行测试
@RestController
public class TestController {
@Autowired
private AccountService accountService;
@RequestMapping("/test")
public String test(){
String result =null;
boolean b = accountService.transfer("A", "B", 200);
if(b){
result = "转账成功";
}else{
result = "转账异常";
}
return result;
}
}