Mybatis批量更新数据库错误问题
问题
记录一次使用Mybatis批量更新数据库的错误,错误信息,
Error updating database. Cause: org.postgresql.util.PSQLException: 错误: 字段 "update_time" 的类型为 timestamp without time zone, 但表达式的类型为 text 建议:你需要重写或转换表达式 位置:391
如下图,说我有一个字段是timestamp类型,但是我表达式计算出来的是text类型
分析&解决
JavaBean对象如下,updateTime是Date类型
import lombok.Data; import javax.persistence.Table; import java.io.Serializable; import java.util.Date; @Table(name = "tb_user") @Data public class User implements Serializable { private Integer id; private String username; private String password; private Date createTiem; private Date updateTime; }
批量更新SQL如下
<update id="updateBatch" parameterType="java.util.ArrayList"> update tb_user set username = case <foreach collection="users" item="user"> when id = #{user.id} <choose> <when test="user.username != null and user.username != ''">then #{user.username}</when> <otherwise>then username</otherwise> </choose> </foreach> end, password = case <foreach collection="users" item="user"> when id = #{user.id} <choose> <when test="user.password != null and user.password != ''">then #{user.password}</when> <otherwise>then password</otherwise> </choose> </foreach> end, update_time = case <foreach collection="users" item="user"> when id = #{user.id} <choose> <when test="user.updateTime != null">then #{user.updateTime}</when> <otherwise>then update_time</otherwise> </choose> </foreach> end where <foreach collection="users" item="user" separator="or"> id = #{user.id} </foreach> </update>
关于Mybatis批量更新对象,参考下面这篇文章:
- 老实说,我也不知道为什么,之前用都没问题。
- 我推测是不是postgres的原因,我之前用的是MySQL。
找不出来原因,我使用了下面这种方式解决:
update_time = case <foreach collection="users" item="user"> when id = #{user.id} <choose> <when test="true">then now()</when> <otherwise>then update_time</otherwise> </choose> </foreach> end
就是说,我对象不传这个字段了,直接使用数据库自带的now()方法来更新,反正都是获取当前时间。
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
相关文章
Linux Ubuntu系统下配置JDK环境、MySQL环境全过程
众所周知Ubuntu是一种基于Linux的操作系统,它提供了一个稳定、安全和易于使用的环境,下面这篇文章主要给大家介绍了关于Linux Ubuntu系统下配置JDK环境、MySQL环境的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下2024-07-07Springboot +redis+谷歌开源Kaptcha实现图片验证码功能
这篇文章主要介绍了Springboot +redis+⾕歌开源Kaptcha实现图片验证码功能,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下2022-01-01详解@ConfigurationProperties实现原理与实战
这篇文章主要介绍了详解@ConfigurationProperties实现原理与实战,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧2020-10-10
最新评论