Mybatis 动态使用update语句

本文介绍了一种使用MyBatis动态SQL来更新数据库中产品音频配置的方法。通过设置不同的参数,可以有选择地更新标题、排序、音频文件等字段。
    update  pf_product_audio_t
        <trim prefix="set" suffixOverrides=",">
            <if test="title != null">title=#{title},</if>
            <if test="sort != null">sort=#{sort},</if>
            <if test="audio != null">audio=#{audio},</if>
            <if test="prodId != null">prod_id=#{prodId},</if>    
            <if test="prodName != null">prod_name=#{prodName},</if>    
            <if test="isDel != null">is_del=#{isDel},</if>    
            <if test="isAdopt != null">is_adopt=#{isAdopt},</if>
            <if test="createTime != null">create_time=#{createTime},</if>
            <if test="createUser != null">create_user=#{createUser},</if>
            <if test="modifyTime != null">modify_time=#{modifyTime},</if>
            <if test="modifyUser != null">modify_user=#{modifyUser},</if>
        </trim>
        <where>
            id = #{id}
        </where>

 

转载于:https://www.cnblogs.com/zhuzhen/p/7661140.html

### MyBatis 中构建动态 UPDATE 语句MyBatis 中,可以通过 `<if>` 标签来实现动态 SQL 的条件判断功能。这使得可以根据 Java 对象中的属性值决定是否包含某些字段更新操作[^3]。 下面是一个完整的动态 `UPDATE` 语句示例: #### XML 配置方式 ```xml <update id="dynamicUpdateUser" parameterType="map"> UPDATE users <set> <if test="username != null">username = #{username},</if> <if test="email != null">email = #{email},</if> <if test="age != null">age = #{age}</if> </set> WHERE id = #{id} </update> ``` 在这个例子中: - 使用了 `<set>` 标签自动处理逗号分隔符的问题。 - 如果某个参数为空,则对应的字段不会被纳入到最终的 SQL 更新语句中[^4]。 #### 注解方式 (推荐配合 `@UpdateProvider`) 如果更倾向于使用注解形式定义 SQL 而不是 XML 文件,可以采用如下方法: ```java public class UserSqlProvider { public String dynamicUpdateUser(Map<String, Object> param) { StringBuilder sqlBuilder = new StringBuilder(); sqlBuilder.append("UPDATE users SET "); boolean hasCondition = false; if(param.get("username") != null){ if(hasCondition){ sqlBuilder.append(","); } sqlBuilder.append(" username = #{username} "); hasCondition = true; } if(param.get("email") != null){ if(hasCondition){ sqlBuilder.append(","); } sqlBuilder.append(" email = #{email} "); hasCondition = true; } if(param.get("age") != null){ if(hasCondition){ sqlBuilder.append(","); } sqlBuilder.append(" age = #{age} "); } sqlBuilder.append("WHERE id = #{id}"); return sqlBuilder.toString(); } } // Mapper 接口 @Mapper public interface UserMapper { @UpdateProvider(type=UserSqlProvider.class, method="dynamicUpdateUser") int dynamicUpdateUser(@Param("id") Integer id, @Param("username") String username, @Param("email") String email, @Param("age") Integer age); } ``` 上述代码展示了如何通过自定义 SQL 提供者类 (`UserSqlProvider`) 和 `@UpdateProvider` 注解完成动态 SQL 的编写[^2]。 --- #### 注意事项 1. **防止 SQL 注入**:始终使用 `#{}` 占位符绑定变量,而不是直接拼接字符串[^1]。 2. **性能优化**:当涉及大量字段时,建议仅传递需要修改的数据项以减少不必要的数据库开销。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值