批量新增和批量修改在业务中是很常见的,一条sql访问数据库和通过代码循环体中循环访问数据库做单个数据新增修改相比较下:一条sql访问数据库性能上明显提升,代码且简洁明了
1、Mapper.java中
说明:参数是list
@Repository
public interface ProcessUnitDurationMapper {
int updateMultiple(List list);
}
2、Mapper.xml中
说明:通过trim标签拼接前后缀和去除多余的逗号,parameterType即是参数list中的元素—实体类(必须写),item是list中元素的实体类的实例对象,WHEN是条件,THEN是赋值
UPDATE st_process_unit_duration
WHEN id =#{processUnitDuration.id} THEN #{processUnitDuration.processId}
WHEN id =#{processUnitDuration.id} THEN #{processUnitDuration.unitDuration}
WHEN id =#{processUnitDuration.id} THEN #{processUnitDuration.initDuration}
WHEN id =#{processUnitDuration.id} THEN #{processUnitDuration.updateBy}
WHEN id =#{processUnitDuration.id} THEN #{processUnitDuration.updateTime}
version = version+1
id =#{processUnitDuration.id}
1、Mapper.java中
说明:参数是list
@Repository
public interface ProcessUnitDurationMapper {
int insertMultiple(List list);
}
2、Mapper.xml中
分两种情况: (一)、主键自增情况字段较少,插入字段灵活性高 (二)、主键不自增,字段较多
情况一说明:通过trim标签拼接前后缀和去除多余的逗号,parameterType即是参数list中的元素—实体类(必须写),useGeneratedKeys=true表明主键自增,keyProperty指定主键自增字段
insert into st_process_unit_duration
process_id,
unit_duration,
init_duration
#{list.processId,jdbcType=VARCHAR},
#{list.unitDuration,jdbcType=INTEGER},
#{list.initDuration,jdbcType=INTEGER}
情况二说明:如果使用trim标签会显得很臃肿,所以手动拼接即可,parameterType即是参数list中的元素—实体类(必须写),与情况一对比,字段插入灵活性略低
id,
create_by,
create_time,
update_by,
update_time,
version,
process_id,
unit_duration,
init_duration
insert into st_process_unit_duration(
)
values
(#{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})
结束语:珍视每一次机会,输给自己的感觉,比输给别人更惨