當咱們在新增一條主表的時候,每每有不少明細表,有的人在新增明細表的時候就是在程序中循環新增明細表。java
這樣作的問題就是效率很低,由於咱們要屢次鏈接數據庫。sql
因此咱們要用到sql的批量新增,其實就是傳入一個明細list,而後在sql中循環執行。數據庫
批量新增:(service層)app
@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.xmlide
<!-- 字段值 --> <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>
示例爲:ui
INSERT into sys_department(ID,NAME,NAME_EN,CODE) VALUES('3','LI','LI01','JIAN01'),('4','LI2','LI2','JIAN2')
批量修改:(批量修改咱們是採用先刪除明細表,再從新批量新增明細表)xml
if (detailss != null && detailss.size() > 0) { fixedAssetsRequisitionDetailsService.deleteByFarId(fixedAssetsRequisition.getId()); dao.batchSave("FixedAssetsreRuisitionDetailsMapper.save",detailss ); }
批量刪除:(咱們經過主表id來刪除多個已主表id爲外鍵的明細記錄)get