问题
mysql 执行update操作 记录未修改
详细问题
笔者进行SpringBoot+Mybatis项目开发,确认执行update操作
控制台内容如下
Creating a new SqlSession
SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@3cbe9459] was not registered for synchronization because synchronization is not active
JDBC Connection [HikariProxyConnection@1376254402 wrapping com.mysql.cj.jdbc.ConnectionImpl@358b728d] will not be managed by Spring
==> Preparing: update userinfo set avatar_base64 = ? and nickname = ? and bio = ? and birthday = ?
==> Parameters: 1111(String), 飞滕人生111(String), 爱码士(String), 2024-02-15(Date)
<== Updates: 1
Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@3cbe9459]
update操作代码如下
@Update("update userinfo set avatar_base64 = #{avatarBase64} and nickname = #{nickname} " +
"and bio = #{bio} and birthday = #{birthday} ")
int updateUserInfo(UserInfo userInfo);
但数据库数据未修改
解决方案
修改update操作代码,将and 修改为,
即:
@Update("update userinfo set avatar_base64 = #{avatarBase64}, nickname = #{nickname} " +
", bio = #{bio}, birthday = #{birthday} ")
int updateUserInfo(UserInfo userInfo);
产生原因
在MyBatis中,使用update语句更新数据库记录时,需要注意SQL语句的书写格式。在笔者提供的代码中,update语句的书写存在问题。
解决原因
通过将and修改为逗号,,确保了每个字段的赋值是独立的,不会被错误地当做逻辑运算符,从而导致update操作失败。
总结
1、对于Mybatis所给反馈,具有很强的误解性
Updates: 1 表示执行了一次更新操作,并且影响了一个记录(即一行数据被更新)。这是MyBatis在执行更新操作后返回的消息,指示执行了一次更新并且成功地修改了一个记录。
但是实际上,并没有更新一行数据
2、越是莫名奇妙的bug,产生的原因可能越是低级。
这里笔者所犯错误为低级的语法错误
参考文献
产生原因与解释原因部分 部分内容参考chatgpt
原创不易
转载请标明出处
如果对你有所帮助 别忘啦点赞支持哈