在 MyBatis 里面,如果想批量更新一个 Map ,可以使用 update 标签来定义 SQL 更新语句,然后在 foreach 标签中遍历 Map ,将 Map 对象中的每个键值对作为更新语句的参数传入。

xml文件中的动态SQL 如下:

<update id="batchUpdateSystemMarkSerial" parameterType="java.util.Map">
    <foreach collection="map.entrySet()" index="key" item="value" separator=";">
      update order_information
      set system_mark_serial = #{value}
      where id = #{key}
    </foreach>
</update>

mapper 文件中的接口定义如下:

/**
 * 批量更新系统标签字段
 * @param key 订单id value 对应的系统标签值
 */  
int batchUpdateSystemMarkSerial(@Param("map") Map<Integer, String> idAndNewSystemMarkSerialMap);

测试代码

@SpringBootTest
class XxlJobTest {

    @Autowired
    private OrderInformationMapper orderInformationMapper;

    @Test
    void testBatchUpdateSystemMarkSerial() {
        Map<Integer, String> idAndSystemMarkSerialMap = new HashMap<>();
        idAndSystemMarkSerialMap.put(595938, "1,3,4");
        idAndSystemMarkSerialMap.put(595939, "2,5,7,8");
        orderInformationMapper.batchUpdateSystemMarkSerial(idAndSystemMarkSerialMap);
    }

}

查看数据库,发现数据已经成功更新。

更细致的用法参考 Mybatis 官网中的 Dynamic SQL