Springboot操作資料庫 事務回滾
阿新 • • 發佈:2021-01-16
技術標籤:程式碼
操作sqlserver資料庫時,比如新增、更新操作。而當sqlserver出現錯誤或異常時,需要將已經執行的操作撤回。
- 在service層中設定資料庫的回滾
通過@Transactional註解
@Service
@Transactional
public class UserServiceImpl implements UserService {
@Autowired
private UserMapper userMapper;
@Autowired
private RedisTemplate redisTemplate;
@Override
@Transactional (rollbackFor = Exception.class)
public int addUser(User user) {
try {
// 新增user1
userMapper.addUser(user);
// 新增user2 重複新增相同資料,此時出現"主鍵重複"錯誤
userMapper.addUser(user);
} catch (Exception e) {
//e.printStackTrace();
// 資料庫回滾操作
TransactionAspectSupport.currentTransactionStatus ().setRollbackOnly();
return 0;
}
// 新增成功後,將資料寫入redis資料庫
redisTemplate.opsForHash().put("userHash", user.getId(), user);
return 1;
}
}
當沒有使用“TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();”執行回滾操作時,“新增user1”的語句已經執行,資料庫中存在user1的資料。使用回滾操作後,因為“新增user2”出現異常,雖然“新增user1”執行成功,但user1沒有寫入資料庫。
- 啟動類中需要添加註解@EnableTransactionManagement
@SpringBootApplication
@EnableTransactionManagement
public class StartApplication {
public static void main(String[] args) throws Exception {
SpringApplication.run(StartApplication.class, args);
}
}