当前位置: 首页 > 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.gsyq.cn/news/68773.html

相关文章:

  • 2025 年 12 月制氮机厂家推荐榜单,PSA制氮机装置,模组制氮机,氨气净化干燥装置,高效稳定品牌精选!
  • 文本到图像、涂鸦转换、人像风格重塑
  • 2025数据安全管理平台Top榜:自定义合规治理AI优化能力评测
  • APP界面设计公司分享;社交金融APP情感化设计打破行业刻板印象
  • 当销售额下降时,ChatBI 如何实现多维下钻、归因分析?
  • RelativeLayout 根布局里有一个子布局预期一直展示,但子布局RelativeLayout被 覆盖了
  • 仓库货架公司推荐,钢制货架/冷库货架/托盘货架/组合式货架/精益管料架/金属货架/仓库货架产品有哪些
  • 鹰队射手群爆发,NBA 常规赛击败爵士拿下四连胜
  • 荷球青少年联赛开赛,河南 50 支队伍同场竞技
  • 摆脱黄气显老!2025美白淡斑五大王牌,焕白紧致立竿见影
  • 王楚钦 4-2 林高远,晋级全运会乒乓球男单四强
  • 允许mysql数据其他pc访问
  • 2025年木门十大品牌权威解析 | 国内一线品牌综合实力排行榜
  • 上海、天津、南京、北京、杭州家具定制公司TOP4推荐,上海拉迷领先!
  • 2025iPaaS平台权威测评:连趣云凭价格优势易用安全稳定体系及差异步骤稳居榜首
  • springboot jdk17 vue3 建行龙支付 二维码扫码支付 回调 及退费
  • 2025年臭氧发生器行业优质企业排行榜单,台车烘箱/脱硝臭氧发生器/大型烘房/V型混合机/固化烘箱/臭氧灭菌烘箱臭氧发生器企业哪个好
  • 2025 年留学机构服务咨询最新推荐榜,聚焦机构合规资质与服务品质深度解析本科留学/出国留学/高中生留学/英国留学/考研后留学/高考后留学/英国留学公司推荐
  • 高并发场景下,数据库连接池耗尽怎么办?
  • 计算电解液溶剂粘度的工具
  • 一段有意思的代码
  • EasyGBS新版本(v3.7.168)发布!视频能力再度升级!
  • 2025年浙江省颗粒物废气处理公司推荐:废气处理生产厂家TO
  • 我的python日记
  • etcd集群常用操作
  • MySQL UPDATE多表关联更新
  • Avalonia 最大化适配不同DPI
  • 2025年电子试验机厂家权威推荐榜单:导热系数仪生产厂家‌/电子试验机生产厂家‌/导热系数仪厂家‌源头厂家精选
  • 订阅号看一看推送 关闭
  • QTemporaryFile