MyBatis动态SQL在实际开发中的应用(1)

1.往数据库插入数据

通过trim标签和if标签可以实现列数据为空的不进行插入。

insert into enum_machining_bill_delivery_type
    <trim prefix="(" suffix=")" suffixOverrides=",">
      <if test="deliveryType != null">
        delivery_type,
      </if>
      <if test="deliveryTypeName != null">
        delivery_type_name,
      </if>
    </trim>
    <trim prefix="values (" suffix=")" suffixOverrides=",">
      <if test="deliveryType != null">
        #{deliveryType,jdbcType=CHAR},
      </if>
      <if test="deliveryTypeName != null">
        #{deliveryTypeName,jdbcType=CHAR},
      </if>
    </trim>

trim元素的主要功能是可以在自己包含的内容前加上某些前缀,也可以在其后加上某些后缀,与之对应的属性是prefix和suffix;可以把包含内容的首部某些内容覆盖,即忽略,也可以把尾部的某些内容覆盖,对应的属性是prefixOverrides和suffixOverrides;
本案例,通过动态标签的运用可以动态的插入每列数据,通过if标签进行null判断。

2.修改数据Update

update enum_machining_bill_delivery_type
    <set> //修改
      <if test="deliveryType != null">
        delivery_type = #{deliveryType,jdbcType=CHAR},
      </if>
      <if test="deliveryTypeName != null">
        delivery_type_name = #{deliveryTypeName,jdbcType=CHAR},
      </if>
    </set>
    where id = #{id,jdbcType=INTEGER}

set标签里面配合if标签可以实现动态修改数据,为空为null的列不进行修改。if起到判断作用,if里面是数据库字段和实体字段赋值语句。

3.批量增加

insert into fee_setting
        (
        warehouse_id, warehouse_name, machining_bill_type,
        amount, day_index,create_time
        )
        values
        <foreach collection="addFeeSettingsRequest.feeSettingList" item="item" index="index" separator=",">
            (
            #{addFeeSettingsRequest.warehouseId,jdbcType=INTEGER},
            #{addFeeSettingsRequest.warehouseName,jdbcType=VARCHAR},

            #{item.machiningBillType,jdbcType=VARCHAR},
            #{item.amount,jdbcType=DECIMAL},

            #{item.dayIndex,jdbcType=INTEGER},NOW()
            )
        </foreach>

你可能感兴趣的:(SSM框架,java学习,MySQL,java,mysql,sql,数据库,mybatis)