在 MyBatis 中,批量新增或者更新操作时使用 <trim> 标签配合 <if> 条件标签来实现动态sql,只有当字段有值时才新增或者更新

示例mapper

public void insertBatchDlDevice(@Param("list") List<DlDevice> list);

映射文件中的 SQL 定义
在 MyBatis 映射文件中定义批量插入的 SQL 语句:

<insert id="insertBatchDlDevice" parameterType="com.cdtye.power.domain.DlDevice">
<foreach collection="list" item="item" separator=";">
    INSERT INTO dl_device
    <trim prefix="(" suffix=")" suffixOverrides=",">
        <if test="item.id != null">id,</if>
        <if test="item.parentId != null">parent_id,</if>
        <if test="item.deviceClassId != null">device_class_id,</if>
</trim>
<trim prefix="values (" suffix=")" suffixOverrides=",">
    <if test="item.id != null">#{item.id},</if>
    <if test="item.parentId != null">#{item.parentId},</if>
    <if test="item.deviceClassId != null">#{item.deviceClassId},</if>
</trim>
</foreach>
</insert>

这里的关键点:allowMultiQueries=true 允许数据库直接批量操作,数据库默认是false
url: jdbc:mysql://172.26.1.110:3306/crscd_itps_prod?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&allowMultiQueries=true

批量更新:

public void updateBatchDlDevice(@Param("list") List<DlDevice> list);

<update id="updateBatchDlDevice" parameterType="com.cdtye.power.domain.DlDevice">
        <foreach collection="list" item="item" index="index" open="" close="" separator=";">
            UPDATE dl_device
            <set>
                <if test="item.parentId != null">parent_id = #{item.parentId},</if>
                <if test="item.deviceClassId != null">device_class_id = #{item.deviceClassId},</if>
                <if test="item.sotingId != null">soting_id = #{item.sotingId},</if>
                <if test="item.sotingName != null">soting_name = #{item.sotingName},</if>
                </set>
            where `id` = #{item.id}
        </foreach>
</update>
 

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值