JFinal DB.tx()事务

博客讲述了在开发过程中遇到的问题,即用户添加系统时输入不存在的服务器地址导致系统创建但关联失败。为解决这个问题,提出了两种方法:一是改进前端逻辑,使用下拉菜单限制用户只能选择已有服务器;二是利用JFinal框架的事务回滚功能,在服务层确保数据操作的一致性。通过这些措施,成功避免了系统添加过程中可能出现的不一致状态。
摘要由CSDN通过智能技术生成

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.最终效果

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值