Mybatis 批量更新数据排序号


<update id="updateSortNumber">
    SET @i:=0;
    UPDATE exam_paper_question  SET sort_number = (SELECT (@i:=@i+1))  WHERE paper_id = # 
    {id} ORDER BY question_type asc
</update>

### MyBatis批量更新数据的 SQL 映射方法 在 MyBatis 的 SQL 映射文件中,可以通过多种方式实现批量更新操作。以下是基于提供的引用内容和专业知识整理的一个完整的解决方案。 #### 使用 `<foreach>` 实现批量更新 `<foreach>` 是 MyBatis 提供的一种强大的工具,可以用来处理集合类型的参数。下面是一个利用 `<foreach>` 标签完成批量更新的例子: ```xml <update id="batchUpdate" parameterType="java.util.List"> <foreach collection="list" item="item" index="index" open="" close="" separator=";"> UPDATE your_table_name SET column1 = #{item.column1}, column2 = #{item.column2} WHERE id = #{item.id} </foreach> </update> ``` 上述代码片段展示了如何通过传递一个 `List<Map<String, Object>>` 或者自定义对象列表来执行批量更新操作[^1]。需要注意的是,在实际应用中应调整字段名 (`column1`, `column2`) 和表名 (`your_table_name`) 来适配具体业务场景的需求。 #### 动态 SQL 支持条件判断 如果需要更灵活地控制哪些记录被更新,则可引入动态 SQL 结构。例如,使用 `<if>` 标签配合 `<set>` 只有当某些特定条件下才设置新值: ```xml <update id="conditionalBatchUpdate" parameterType="map"> UPDATE table_name <set> <if test="newColumnValue != null">column_to_update = #{newColumnValue},</if> last_updated_time = NOW() </set> WHERE primary_key IN <foreach collection="ids" item="id" open="(" separator="," close=")"> #{id} </foreach> </update> ``` 此示例说明了如何结合动态 SQL 构建更加复杂的批处理逻辑[^2]。这里的关键在于合理运用各种标签如 `<if>`, `<where>`, `<trim>` 等以满足不同情况下的需求。 #### 基于子查询的方式 另一种常见的做法是从另一个查询结果集中获取待更新数据源,并据此实施更新动作。如下所示即为一种典型模式: ```sql UPDATE target_table AS t INNER JOIN ( SELECT key_column FROM source_table WHERE condition_expression ) AS s ON t.key_column = s.key_column SET t.update_column = new_value; ``` 将其转换成 MyBatis 风格后可能看起来像这样: ```xml <update id="subqueryBasedBatchUpdate" parameterType="hashMap"> UPDATE pro_project AS u INNER JOIN ( SELECT project_id FROM pro_project WHERE DATE_FORMAT(CURDATE(), '%Y-%m-%d') > DATE_FORMAT(ADDDATE(project_subtime, INTERVAL #{overStateTime} DAY), '%Y-%m-%d') ) AS r ON u.project_id = r.project_id SET u.project_overstate = #{projectOverstate}, u.project_subtime = SYSDATE() </update> ``` 这段脚本体现了依据时间差筛选项目并同步改变其状态的过程[^4]。 以上就是关于 MyBatis 批量更新的一些常用技巧及其对应的 XML 映射配置实例。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值