Mybatis批量更新数据库错误问题

 更新时间:2024年08月05日 09:26:37   作者:何中应  
这篇文章主要介绍了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批量更新对象,参考下面这篇文章:

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()方法来更新,反正都是获取当前时间。

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • 解决SpringBoot jar包中的文件读取问题实现

    解决SpringBoot jar包中的文件读取问题实现

    这篇文章主要介绍了解决SpringBoot jar包中的文件读取问题实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-08-08
  • Linux Ubuntu系统下配置JDK环境、MySQL环境全过程

    Linux Ubuntu系统下配置JDK环境、MySQL环境全过程

    众所周知Ubuntu是一种基于Linux的操作系统,它提供了一个稳定、安全和易于使用的环境,下面这篇文章主要给大家介绍了关于Linux Ubuntu系统下配置JDK环境、MySQL环境的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2024-07-07
  • Java工作队列代码详解

    Java工作队列代码详解

    这篇文章主要介绍了Java工作队列代码详解,涉及Round-robin 转发,消息应答(messageacknowledgments),消息持久化(Messagedurability)等相关内容,具有一定参考价值,需要的朋友可以了解下。
    2017-11-11
  • Java开发者结合Node.js编程入门教程

    Java开发者结合Node.js编程入门教程

    这篇文章主要介绍了Java开发者结合Node.js编程入门教程,我将先向您展示如何使用Java EE创建一个简单的Rest服务来读取 MongoDB数据库。然后我会用node.js来实现相同的功能,需要的朋友可以参考下
    2014-09-09
  • Java面向对象基础,类,变量,方法

    Java面向对象基础,类,变量,方法

    这篇文章主要介绍了Java面向对象基础,类,变量,方法,需要的朋友可以参考下
    2020-10-10
  • Springboot +redis+谷歌开源Kaptcha实现图片验证码功能

    Springboot +redis+谷歌开源Kaptcha实现图片验证码功能

    这篇文章主要介绍了Springboot +redis+⾕歌开源Kaptcha实现图片验证码功能,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-01-01
  • Java字符串的intern方法有何奥妙之处

    Java字符串的intern方法有何奥妙之处

    intern() 方法返回字符串对象的规范化表示形式。它遵循以下规则:对于任意两个字符串 s 和 t,当且仅当 s.equals(t) 为 true 时,s.intern() == t.intern() 才为 true
    2021-10-10
  • Springboot主程序类注解配置过程图解

    Springboot主程序类注解配置过程图解

    这篇文章主要介绍了Springboot主程序类注解配置过程图解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-10-10
  • 深入探索Java常量池

    深入探索Java常量池

    这篇文章主要介绍了深入探索Java常量池,涉及静态常量池和运行时常量池的介绍,常量池的好处,8种基本数据类型的包装类和常量池等相关内容,具有一定参考价值,需要的朋友可以了解下。
    2017-11-11
  • 详解@ConfigurationProperties实现原理与实战

    详解@ConfigurationProperties实现原理与实战

    这篇文章主要介绍了详解@ConfigurationProperties实现原理与实战,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-10-10

最新评论