MyBatis动态sql之批量修改、批量新增(使用foreach标签的一条sql语句解决)
使用原因:
批量新增和批量修改在业务中是很常见的,一条sql访问数据库和通过代码循环体中循环访问数据库做单个数据新增修改相比较下:一条sql访问数据库性能上明显提升,代码且简洁明了
批量修改:
1、Mapper.java中
说明:参数是list
@Repositorypublic interface ProcessUnitDurationMapper { int updateMultiple(List list);}
2、Mapper.xml中
说明:通过trim标签拼接前后缀和去除多余的逗号,parameterType即是参数list中的元素—实体类(必须写),item是list中元素的实体类的实例对象,WHEN是条件,THEN是赋值
UPDATE st_process_unit_durationWHEN id =#{processUnitDuration.id} THEN #{processUnitDuration.processId} WHEN id =#{processUnitDuration.id} THEN #{processUnitDuration.updateBy} WHEN id =#{processUnitDuration.id} THEN #{processUnitDuration.updateTime} version = version+1id =#{processUnitDuration.id}
批量新增:
1、Mapper.java中
说明:参数是list
@Repositorypublic interface ProcessUnitDurationMapper { int insertMultiple(List list);}
2、Mapper.xml中
分两种情况: (一)、主键自增情况字段较少,插入字段灵活性高 (二)、主键不自增,字段较多
情况一说明:通过trim标签拼接前后缀和去除多余的逗号,parameterType即是参数list中的元素—实体类(必须写),useGeneratedKeys=true表明主键自增,keyProperty指定主键自增字段
insert into st_process_unit_durationprocess_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})
注意情况:
结束语:珍视每一次机会,输给自己的感觉,比输给别人更惨
来源地址:https://blog.csdn.net/Da_zhenzai/article/details/127817838
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341