插入操作后需检查行数吗?是否保留行数校验代码?
关于插入操作的行数判断是否需要保留
结论是:不一定必须移除,得看你的业务场景和SQL逻辑,具体分析如下:
- 首先明确:大多数数据库操作失败(比如连接中断、主键冲突、语法错误)确实会抛出数据库相关异常(MyBatis会把SQLException包装成自身异常抛出),但存在一种特殊情况——SQL执行成功,但实际没有插入任何行,这种情况不会抛异常,只会返回影响行数0。
常见的这类场景包括:
- 使用了
INSERT ... WHERE这类带条件的插入语句,当条件不满足时不会插入数据 - 数据库触发器或规则拦截了插入操作,但未抛出错误
- 使用
INSERT ... ON DUPLICATE KEY UPDATE语句,遇到重复数据时执行了更新而非插入,此时返回行数可能是0或2(更新的行数)
如果你的业务要求必须确保这条记录被成功插入(影响行数必须为1),那这段if(result !=1)的判断就很有必要——它能捕获那些SQL没报错但业务上没达到预期的情况,避免静默失败。
如果你的插入逻辑很简单,比如就是普通的单条INSERT,且能保证只要SQL执行成功就一定会插入1行,那这段判断属于冗余的双重校验,移除也没问题,但留着也不会有副作用,相当于多一层业务兜底。
总结:如果业务上对插入结果有强要求(必须插入成功1行),就保留;如果能确保所有失败场景都会抛异常,且不需要校验行数,就可以移除。
内容的提问来源于stack exchange,提问作者Rurien
相关产品推荐
相关产品推荐

