Mybatis使用foreach标签批量update的返回值

简介 文章讨论了在使用foreach遍历`formDefDOS`列表时,每个updateSQL语句的执行情况。当某个formDefId对应数据库中的多条记录时,整体方法的返回值会受这些匹配记录数量影响,而非预期的单个操作结果。

🔔🔔好消息!好消息!🔔🔔

 如果您需要注册ChatGPT,想要升级ChatGPT4。凯哥可以代注册ChatGPT账号代升级ChatGPT4

有需要的朋友👉:微信号 kaigejava2022

业务:入参是就一个集合,循环每一个集合,然后更新对应的值。

处理:用一种更为传统的方法来构建你的批量更新语句。你可以利用foreach标签来构建一个IN子句或者使用SET语句的批处理方式。

<update id="updateStartTimeBatch">
    UPDATE tableA  SET start_time = CASE project_number 
    <foreach collection="updateStartTimeProjectList" item="project" index="index" open="" separator=" " close="">
        WHEN #{project.projectNumber} THEN #{project.startTime}
    </foreach>
    END
    WHERE project_number IN 
    <foreach collection="updateStartTimeProjectList" item="project" index="index" open="(" separator="," close=")">
        #{project.projectNumber}
    </foreach>
</update>

这个方法使用了CASE WHEN结构来更新start_time字段,只有当project_number与提供的项目编号之一匹配时才会更新该行的start_time。这样可以在一次查询中更新多行数据。

注意:

  • #{project.startTime} 应该是一个正确格式化的日期时间字符串或者能够被数据库正确解析的时间戳,这取决于数据库的设置。

  • 如果start_time字段需要精确到毫秒的时间戳,确保在传递给MyBatis之前进行适当的格式化。


TopTop