后端如何处理前端传过来的数组实现更新操作

如果前端页面传来一个数组,后端如何实现它的更新操作那?

先看前端传递的数组形式:

[
  { id: "1924449974744399875", key: "D151", selectedKey: "4" },
  { id: "1924449974744399876", key: "D152", selectedKey: "1" },
  ...
]

当我们需要更新这组数据时,可以用批量更新的方式

Controller层:

声明一个List 接收传递过来的数组

public CommonResult update(@RequestBody List bo)
{
    return CommonResult.success(UserService.update(bo));
}

Service层:

作具体的逻辑操作,这里是更新操作

public int update(List bo)
{
    // 修改操作
    List user = BeanUtil.copyToList(bo, User.class);
    return baseMapper.updateList(User);
}

Mapper层: 

 这是本次内容的重点,主要讲解了mybatis如何使用xml实现批量更新的操作

public interface UserMapper extends BaseMapper {

    int updateList(@Param("list") List entities);

}

然后在xml文件中写具体的sql操作




    
       UPDATE User
       
          
          
             
                WHEN id = #{item.id} THEN #{item.updateBy}
             
          
          
             
                WHEN id = #{item.id} THEN #{item.updateTime}
             
          
          
             
                WHEN id = #{item.id} THEN #{item.selectedKey}
             
          
       
       WHERE id IN
       
          #{item.id}
       
    

 

需要注意的是 里定义的是UserMapper的路径,  id属性是你要作用的方法名,parameterType是传递的参数类型。

标签的作用 :

 标签的作用:

  • prefix="SET":在生成的 SQL 中添加 SET 关键字。
  • suffixOverrides=",":移除结尾多余的逗号,避免语法错误 标签:
  • 遍历传入的 List 参数中的每个对象(item
  • 使用 CASE WHEN 语句为每个字段(动态生成更新逻辑

 标签的作用:

  • 遍历传入的 List 参数中的每个对象(item

生成的sql相当于:

UPDATE t_agreement_point
SET
  update_by = CASE
     WHEN id = 1 THEN 'user1'
     WHEN id = 2 THEN 'user2'
  END,
  update_time = CASE
     WHEN id = 1 THEN '2025-05-26'
     WHEN id = 2 THEN '2025-05-27'
  END,
  selected_key = CASE
     WHEN id = 1 THEN 'key1'
     WHEN id = 2 THEN 'key2'
  END
WHERE id IN (1, 2)

你可能感兴趣的:(mybatis,java)