使用临时表进行一个关联 ,同时更新3个字段
sql如下
UPDATE NWSP_WM_NSCP_VOICE_RECORDS m
SET (m.IDENTIFY_RIGHT, m.IDENTIFY_ERROR_TYPE, m.IDENTIFY_ERROR_REASON) =
(SELECT c.IDENTIFY_RIGHT, c.IDENTIFY_ERROR_TYPE, c.IDENTIFY_ERROR_REASON
FROM (SELECT ? AS ID, ? AS IDENTIFY_RIGHT, ? AS IDENTIFY_ERROR_TYPE, ? AS IDENTIFY_ERROR_REASON FROM DUAL
UNION ALL
SELECT ? AS ID, ? AS IDENTIFY_RIGHT, ? AS IDENTIFY_ERROR_TYPE, ? AS IDENTIFY_ERROR_REASON FROM DUAL) c
WHERE c.ID = m.ID)
Mapper有
/**
* 批量在线反馈
* @param list
*/
@Update("<script>" +
" UPDATE NWSP_WM_NSCP_VOICE_RECORDS m\n" +
"SET (m.IDENTIFY_RIGHT, m.IDENTIFY_ERROR_TYPE, m.IDENTIFY_ERROR_REASON) =\n" +
"(SELECT c.IDENTIFY_RIGHT, c.IDENTIFY_ERROR_TYPE, c.IDENTIFY_ERROR_REASON\n" +
" FROM " +
"<foreach collection='list' item='item' open='(' end='' close=')' separator='union all'>" +
"SELECT #{item.id,jdbcType=VARCHAR} AS ID,#{item.identifyRight,jdbcType=VARCHAR} AS IDENTIFY_RIGHT,#{item.identifyErrorType,jdbcType=VARCHAR} AS IDENTIFY_ERROR_TYPE,#{item.identifyErrorReason,jdbcType=VARCHAR} AS IDENTIFY_ERROR_REASON FROM DUAL" +
"</foreach>" +
" c" +
" WHERE c.ID = m.ID)"+
"</script>")
void updateOnLineFeedBack(@Param("list") List<InstallSmallDetailVo> list);
这是我觉得最好用的批量更新和xml方式不同之处在于 oracle+mybatisplus存在很多限制,上面是不报错的代码