当前位置: 首页 > news >正文

mapper foreach 多字段更新

<update id="batchUpdateDynamic">UPDATE userSET <foreach collection="fields" item="field" separator=",">${field.name} = #{field.value}</foreach>WHERE id = #{id}
</update>
// Java实体类
@Data
public class UpdateField {private String name;    // 字段名,如:"username", "email"private Object value;   // 字段值
}// Mapper接口
int batchUpdateDynamic(@Param("id") Long id, @Param("fields") List<UpdateField> fields);

版本2:使用Map更灵活

<update id="batchUpdateByMap">UPDATE ${tableName}SET <foreach collection="updateMap" item="value" index="key" separator=",">${key} = #{value}</foreach>WHERE id = #{id}
</update>
// Mapper接口
int batchUpdateByMap(@Param("tableName") String tableName,@Param("id") Long id,@Param("updateMap") Map<String, Object> updateMap);

版本5:使用trim处理逗号

<update id="batchUpdateWithTrim">UPDATE user<trim prefix="SET" suffixOverrides=","><foreach collection="fields" item="field"><if test="field.name != null and field.value != null">${field.name} = #{field.value},</if></foreach></trim>WHERE id = #{id}
</update>

版本6:结合注解使用(更灵活)

// 使用@UpdateProvider实现动态SQL
@UpdateProvider(type = UserSqlProvider.class, method = "buildBatchUpdateSql")
int batchUpdateUser(@Param("id") Long id, @Param("fields") Map<String, Object> fields);// SQL提供类
public class UserSqlProvider {public String buildBatchUpdateSql(Map<String, Object> params) {Long id = (Long) params.get("id");Map<String, Object> fields = (Map<String, Object>) params.get("fields");StringBuilder sql = new StringBuilder("UPDATE user SET ");List<String> updates = new ArrayList<>();for (Map.Entry<String, Object> entry : fields.entrySet()) {// 这里可以对字段名做安全检查if (isValidField(entry.getKey())) {updates.add(entry.getKey() + " = #{fields." + entry.getKey() + "}");}}sql.append(String.join(", ", updates));sql.append(" WHERE id = #{id}");return sql.toString();}private boolean isValidField(String fieldName) {// 定义允许更新的字段Set<String> allowedFields = new HashSet<>(Arrays.asList("username", "email", "age", "status", "phone"));return allowedFields.contains(fieldName);}
}

 

http://www.jsqmd.com/news/58391/

相关文章:

  • 使用uv安装并运行rllm(不需要拉docker)
  • 推荐一家放心的保研规划:这篇推荐指南请收下!
  • 2025 年 12 月制氮机厂家推荐榜单,PSA制氮机装置,模组制氮机,氨气净化干燥装置,高效稳定品牌精选!
  • 2025年系统断桥铝门窗实力厂家权威推荐榜单:中国系统门窗排行榜‌/系统门窗加盟‌/系统门窗代理‌源头厂家精选
  • 2025年豪宅高定家具TOP10口碑榜:住过的人都说“香”
  • 水中油检测仪器正规供应商TOP5权威推荐:个性化定制优选指南
  • 保研机构哪家实惠?这 10 家 “性价比之王”,预算有限也能选!
  • 2025 年 12 月品牌营销咨询公司权威推荐榜:策略创新与市场洞察力的卓越之选!
  • 文本到图像、涂鸦转换、人像风格重塑
  • 2025数据安全管理平台Top榜:自定义合规治理AI优化能力评测
  • 河南青少年荷球联赛收官,郑州七中男女混合队夺冠
  • 作业8
  • 最值得打卡的十大火锅品牌排行榜出炉,重庆火锅/火锅/美食/特色美食/老火锅/火锅店/川渝火锅火锅品牌排行
  • APP界面设计公司分享;社交金融APP情感化设计打破行业刻板印象
  • 聊聊新款MacBook Air的CPU与奇葩散热设计
  • RelativeLayout 根布局里有一个子布局预期一直展示,但子布局RelativeLayout被 覆盖了
  • 【IO多路转接】epoll 高性能网络编程:从底层机制到服务器实战 - 教程
  • “骑跑中国” 重庆站开赛,600 组家庭解锁全民健身新赛道
  • 仓库货架公司推荐,钢制货架/冷库货架/托盘货架/组合式货架/精益管料架/金属货架/仓库货架产品有哪些
  • 2025年高端家具TOP10权威榜单揭晓:真实排名颠覆想象
  • 技术强管理规范的源头厂家甄选指南,助力企业降本提效
  • 嘉峪关青少年飞盘赛开赛,100 余名小将默契比拼
  • 2025年耐高温硅胶线批发厂家权威推荐榜单:硅胶线‌/PVC电子线‌/硅胶数据线‌源头厂家精选
  • 华润饮料中超第 30 轮激战,北京国安 7-0 大胜云南玉昆
  • 湖北男足点球大战险胜广东,首夺全运会男足冠军
  • 第五届北京 BMX 小轮车公开赛收官,青少年展现极限活力
  • Studio 3T 2025.22 发布 - MongoDB 的终极 GUI、IDE 和 客户端
  • 利用梯度下降求一个凸函数的最小值
  • 2025年12月深圳AI搜索优化排名公司推荐:技术领航与性价比之选
  • 防脱洗发水哪个好用?实测这几款防脱洗发水,针对不同脱发类型有效防脱