mybatis 动态sql批量修改
时间: 2023-11-07 13:51:11 浏览: 103
MyBatis动态SQL可以用于批量修改数据。根据提供的引用内容,有两种情况可以实现动态批量修改。
情况一:使用trim标签拼接前后缀和去除多余的逗号。在这种情况下,你需要使用<trim>标签来包裹要插入的字段,并使用<foreach>标签循环遍历参数列表。其中,parameterType指定了参数列表中的元素类型,useGeneratedKeys=true表示主键自增,keyProperty指定了主键自增字段。
```xml
<insert id="insertMultiple" parameterType="com.luntek.metaversevr.entity.ProcessUnitDuration"
useGeneratedKeys="true" keyProperty="id">
insert into st_process_unit_duration
<trim prefix="(" suffix=")" suffixOverrides=",">
<if test="process_id != null"> process_id, </if>
<if test="unit_duration != null"> unit_duration, </if>
<if test="init_duration != null"> init_duration </if>
</trim>
<foreach collection="list" item="list" index="index" separator=",">
<trim prefix="values(" suffix=")" suffixOverrides=",">
<if test="processId != null"> #{list.processId,jdbcType=VARCHAR}, </if>
<if test="unitDuration != null"> #{list.unitDuration,jdbcType=INTEGER}, </if>
<if test="initDuration != null"> #{list.initDuration,jdbcType=INTEGER} </if>
</trim>
</foreach>
</insert>
```
情况二:手动拼接SQL语句。在这种情况下,你可以直接在SQL语句中手动拼接要插入的字段,并使用<foreach>标签循环遍历参数列表。parameterType指定了参数列表中的元素类型。
```xml
<insert id="insertMultiple" parameterType="com.luntek.metaversevr.entity.ProcessUnitDuration">
insert into st_process_unit_duration(
id, create_by, create_time, update_by, update_time, version, process_id, unit_duration, init_duration
)
values
<foreach collection="list" item="list" index="index" separator=",">
(
#{list.id,jdbcType=VARCHAR}, #{list.createBy,jdbcType=VARCHAR}, #{list.createTime,jdbcType=TIMESTAMP},
#{list.updateBy,jdbcType=VARCHAR}, #{list.updateTime,jdbcType=TIMESTAMP}, #{list.version,jdbcType=INTEGER},
#{list.processId,jdbcType=VARCHAR}, #{list.unitDuration,jdbcType=INTEGER}, #{list.initDuration,jdbcType=INTEGER}
)
</foreach>
</insert>
```
以上是两种使用MyBatis动态SQL进行批量修改的方法。具体使用哪种方法取决于你的需求和个人偏好。
阅读全文