JFinal DB.tx()事务

1.发现问题

(1)功能实现逻辑

添加一个新的系统的时候
①先添加系统本身,即名称,地址,简介,将这些存入system表,得到system_id
②添加系统所处的服务器(由于有专门的添加服务器功能,所以这里的服务器只用填地址,如果地址对应服务器不存在,就会提示:该服务器不存在,请先添加服务器),根据服务器地址找到server_id,然后将system_id和server_id存到系统服务器的关联表system_server中
③将管理账号根据system_id存入account表中
如果一切顺利,那就可以成功添加系统

(2)在以下场景时出现问题

如果在2中,用户输入了一个不存在的服务器地址,填完所有信息后一提交,那后端就会完成步骤1和部分步骤2,即创建了系统,也将系统部署到一部分服务器上了,但在遇到了这个不存在的服务器后,return错误信息,那用户在看到错误信息---该服务器不存在后进行修改服务器地址,再点提交,这个时候系统已经存在表中了,那就会添加失败,提示系统已存在,那这个对用户来说是很不合理的反馈,应该怎么解决呢?

---controller初始代码

image

2.解决方法

(1)保证不会出现上述场景

即对前端的逻辑进行修改,用户在添加系统所处服务器时,不是自己随便输入服务器地址,而是使用下拉选框的形式,用户只能从已有的服务器中选择,保证了服务器的存在,可以让这个系统成功顺利的添加

(2)在出现以上场景时正确处理

这里使用的是jFinal框架,它提供了封装好的事务回滚功能:Db.tx()

①基本逻辑

在存入数据库时如果需要一次插入多条数据,就要用到事务,即一旦这一批插入中出现错误,那就会回滚事务,不存在插入了一部分还有一部分没有插入的情况。

Db.tx()会返回布尔类型,return false或者有异常抛出都会自动回滚事务,return true才会提交事务

②基本用法

开发文档中的演示

PS:最开始没有看开发文档,直接百度的,结果啥都不懂,在controller层写的Db.tx(),一点效果都没有...,看了文档之后才搞明白是要在service层写,然后就在service层集中写了addSystem(String list)方法,list就是前端传的JSON字符串,最终效果挺好的

image

③具体应用

---server层

image

---controller层

image

3.最终效果

成功实现了添加系统这个过程的完整一致性,不存在系统添加了但是添加服务器关联失败这样的情况了。这种表单的提交在现实中应用也是很广泛的,所以不能全靠前端逻辑设计来保证功能不会出错,事务,我记住你了哈哈哈

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值