明细表批量新增,修改,删除sql

简介:

当我们在新增一条主表的时候,往往有很多明细表,有的人在新增明细表的时候就是在程序中循环新增明细表。

这样做的问题就是效率很低,因为我们要多次连接数据库。

所以我们要用到sql的批量新增,其实就是传入一个明细list,然后在sql中循环执行。

批量新增:(service层)

1
2
3
4
5
6
7
8
9
10
11
12
@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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<!-- 字段值 -->
     <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>

示例为:

1
INSERT into sys_department(ID,NAME,NAME_EN,CODE) VALUES( '3' , 'LI' , 'LI01' , 'JIAN01' ),( '4' , 'LI2' , 'LI2' , 'JIAN2' )

批量修改:(批量修改我们是采用先删除明细表,再重新批量新增明细表)

1
2
3
4
if  (detailss !=  null  && detailss.size() >  0 ) { 
             fixedAssetsRequisitionDetailsService.deleteByFarId(fixedAssetsRequisition.getId());
             dao.batchSave( "FixedAssetsreRuisitionDetailsMapper.save" ,detailss );
         }

批量删除:(我们通过主表id来删除多个已主表id为外键的明细记录)



      本文转自建波李 51CTO博客,原文链接:http://blog.51cto.com/jianboli/1961405,如需转载请自行联系原作者





相关文章
|
存储 SQL 数据库
SQL Server 删除数据库中表数据
SQL Server 删除数据库中表数据
178 0
|
存储 SQL Go
SQL Server 删除数据库所有表和所有存储过程
SQL Server 删除数据库所有表和所有存储过程
116 0
Sql Server 增加字段、修改字段、修改类型、修改默认值
Sql Server 增加字段、修改字段、修改类型、修改默认值
308 0
|
SQL 数据库
动态批量新建SQL数据库中的表
动态批量新建SQL数据库中的表
140 0
|
SQL 索引
sql做题第十六天(删除记录篇)
• 扩展:在 delete 后加 limit 是个好习惯。原因如下: • 1,delete from 是全表查找的,如果加上limit 时,删除指定的条数后,就会return了。效率提高不少。 • 2,降低写错 SQL 的代价,即使删错了,例如limit 100,也就删除了100条数据,也能通过binlog找回数据 • 3,避免长事务,delete执行时,涉及的行是会加锁,如果删除的数据量大,那业务功能都要不能用了 • 4,加锁都是基于索引的,如果查询字段没有加索引,那会扫描到主键索引上,那么就算查询出来的只有一条记录,也会锁表 • 5,delete数据量大时,容易占用cpu,导致越删除越慢
|
SQL 存储 关系型数据库
RDS For SQL Server删除数据库报错
RDS For SQL Server删除数据库报错
|
SQL 关系型数据库 MySQL
LeetCode SQL专项练习 (2)排序 & 修改
LeetCode SQL专项练习 (2)排序 & 修改
118 0
|
SQL 网络安全
sql注入--通过修改数据完成注入--一文详细讲解
🍀了解通过修改库中数据完成注入的方法
402 0
sql注入--通过修改数据完成注入--一文详细讲解