SpringBoot简单使用事务
一、概述
事务具有原子性,简单说就时执行一组sql,如果我们加上事务,则这一组sql要么全部执行成功,要么全部执行失败。哪怕你99条执行成功了,就一条执行失败了,那本次事务也是失败的,并且执行成功的sql会被回滚到最初的状态。
下面看下SpringBoot如何简单开启事务的。简单的两个注解搞定。
二、示例
1.在入口类上启用事务
/** * SpringBoot程序入口 */ @SpringBootApplication @EnableTransactionManagement//开启事务 public class CursorApplication { public static void main(String[] args) { SpringApplication.run(CursorApplication.class, args); } }
2.在需要事务的类或方法上加上事务。
如果@Transactional在类上,则类中的所有方法都被事务保护,如果加载方法上则只有被加的方法具有事务的特性。
@Transactional//开启事务,要么同事执行成功,要么回滚 @Override public ResultOk saveOrder(Integer userId, Integer videoId) { //获取用户信息 User user = userMapper.getUserById(userId); //获取视频信息 Video video = videoMapper.getVideoById(videoId); //下单 VideoOrder videoOrder = new VideoOrder(); videoOrder.setVideoId(video.getId()); videoOrder.setUserId(user.getId()); videoOrder.setCreateTime(new Date()); videoOrder.setState(1); videoOrder.setTotalFee(PriceUtil.yuan2Fen(video.getPrice())); videoOrder.setVideoTitle(video.getTitle()); videoOrder.setVideoImg(video.getCoverImg()); //模拟订单号生成 String outTradeNo = UUID.randomUUID().toString().replaceAll("-", ""); videoOrder.setOutTradeNo(outTradeNo); int rows = videoOrderMapper.saveOrder(videoOrder); //下单成功后插入播放记录(这里只是模拟,两个插入,也顺便测试一下事务) if (rows > 0) { Episode episode = episodeMapper.findByVideoId(video.getId()); if (episode == null) throw new CustomException("集为空"); PlayRecord play = new PlayRecord(); play.setVideoId(video.getId()); play.setUserId(user.getId()); play.setEpisodeId(episode.getId()); play.setCurrentNum(episode.getNum()); playRecordMapper.savePlayRecord(play); } if (rows > 0) { return ResultOk.ok(200, "下单成功", rows); } return ResultOk.ok(400, "下单失败", rows); }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
2015-09-14 Android 让图片等比例缩放的三种方法