当我们在新增一条主表的时候,往往有很多明细表,有的人在新增明细表的时候就是在程序中循环新增明细表。
这样做的问题就是效率很低,因为我们要多次连接数据库。
所以我们要用到sql的批量新增,其实就是传入一个明细list,然后在sql中循环执行。
批量新增:(service层)
@Transactional(rollbackFor = Exception.class)
@Override
public void save(FixedAssetsRequisition fixedAssetsRequisition,List<FixedAssetsreRuisitionDetails> detailss,String filesId)throws Exception{
dao.save("FixedAssetsRequisitionMapper.save", fixedAssetsRequisition);//主表
if(!"".equals(filesId)){
String[] fileId = filesId.split(",");
fileService.update(fixedAssetsRequisition.getId(), fileId);
}
if (detailss != null && detailss.size() > 0) {
dao.batchSave("FixedAssetsreRuisitionDetailsMapper.save",detailss );//批量新增明细表
}
}
mapper.xml
<!-- 字段值 -->
<sql id="FieldValueList">
#{item.id},
#{item.purchaseContent},
#{item.quantity},
#{item.referencePrice},
#{item.referenceTotalPrice},
#{item.fixedAssetsreRuisitionId}
</sql>
<!-- 新增-->
<insert id="save" parameterType="java.util.List">
insert into
<include refid="tableName"></include>
(
<include refid="Field"></include>
) values
<foreach collection="list" item="item" index="index" separator=",">
(<include refid="FieldValueList"></include>)
</foreach>
</insert>
示例为:
INSERT into sys_department(ID,NAME,NAME_EN,CODE) VALUES('3','LI','LI01','JIAN01'),('4','LI2','LI2','JIAN2')
批量修改:(批量修改我们是采用先删除明细表,再重新批量新增明细表)
if (detailss != null && detailss.size() > 0) {
fixedAssetsRequisitionDetailsService.deleteByFarId(fixedAssetsRequisition.getId());
dao.batchSave("FixedAssetsreRuisitionDetailsMapper.save",detailss );
}
批量删除:(我们通过主表id来删除多个已主表id为外键的明细记录)
转载于:https://blog.51cto.com/jianboli/1961405