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

总结

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

相关文章

  • apollo与springboot集成实现动态刷新配置的教程详解

    apollo与springboot集成实现动态刷新配置的教程详解

    这篇文章主要介绍了apollo与springboot集成实现动态刷新配置,本文分步骤给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-06-06
  • Spring集成Mybatis过程详细讲解

    Spring集成Mybatis过程详细讲解

    mybatis-plus是一个Mybatis的增强工具,在Mybatis的基础上只做增强不做改变,为简化开发、提高效率而生,下面这篇文章主要给大家介绍了关于SpringBoot整合Mybatis-plus案例及用法实例的相关资料,需要的朋友可以参考下
    2023-03-03
  • java公众平台通用接口工具类HttpConnectUtil实例代码

    java公众平台通用接口工具类HttpConnectUtil实例代码

    下面小编就为大家分享一篇java公众平台通用接口工具类HttpConnectUtil实例代码,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-01-01
  • Spring如何使用注解的方式创建bean

    Spring如何使用注解的方式创建bean

    这篇文章主要介绍了Spring如何使用注解的方式创建bean,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-11-11
  • Java中List的contains()方法的使用小结

    Java中List的contains()方法的使用小结

    List 的 contains() 方法用于检查列表中是否包含指定的元素,借助equals()方法进行判断,下面就来介绍Java中List的contains()方法的使用小结,感兴趣的可以了解一下
    2025-04-04
  • Spring AI + 混元带你实现企业级稳定可部署的AI业务智能体

    Spring AI + 混元带你实现企业级稳定可部署的AI业务智能体

    我们深入探讨了Spring AI在智能体构建中的实际应用,特别是在企业环境中的价值与效能,通过逐步实现一个本地部署的智能体解决方案,我们不仅展示了Spring AI的灵活性与易用性,还强调了它在推动AI技术与业务深度融合方面的潜力,感兴趣的朋友一起看看吧
    2024-11-11
  • Java读写ini文件代码示例

    Java读写ini文件代码示例

    这篇文章主要介绍了Java读写ini文件代码示例,分享了相关代码示例及相关注释,小编觉得还是挺不错的,具有一定借鉴价值,需要的朋友可以参考下
    2018-02-02
  • java泛型常用通配符实例解析

    java泛型常用通配符实例解析

    这篇文章主要介绍了java泛型常用通配符实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-01-01
  • Springboot2 session设置超时时间无效的解决

    Springboot2 session设置超时时间无效的解决

    这篇文章主要介绍了Springboot2 session设置超时时间无效的解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-07-07
  • Java判空的一些常见方法

    Java判空的一些常见方法

    这篇文章主要给大家分享介绍了Java判空的一些常见方法,在程序中必须进行严格的判空处理,避免对空对象的异常操作,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2023-07-07

最新评论