博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
明细表批量新增,修改,删除sql
阅读量:6954 次
发布时间:2019-06-27

本文共 1748 字,大约阅读时间需要 5 分钟。

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

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

所以我们要用到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,如需转载请自行联系原作者

你可能感兴趣的文章
TCP协议疑难杂症全景解析
查看>>
redis 1
查看>>
Python安装pycurl失败,及解决办法
查看>>
cocos2d的常用动作及效果总结之四:Special Actions
查看>>
[ lucene扩展 ] MoreLikeThis 相似检索
查看>>
如果返回结构体类型变量(named return value optimisation,NRVO)
查看>>
C# 多线程详解 Part.02(UI 线程和子线程的互动、ProgressBar 的异步调用)
查看>>
基于shiro授权过程
查看>>
JQuery对象和DOM对象的区别与转换
查看>>
使用 Toad 实现 SQL 优化
查看>>
.NET开发技巧——从Winform穿越到WPF
查看>>
2135亿背后的双11项目协作怎么玩?
查看>>
DRDS SQL 审计与分析——全面洞察 SQL 之利器
查看>>
微信小程序:模板消息推送实现
查看>>
CodePush自定义更新弹框及下载进度条
查看>>
自己总结的php开发中用到的工具
查看>>
小程序视频或音频自定义可拖拽进度条
查看>>
PHP导出超大的CSV格式的Excel表方案
查看>>
Mac 环境下如何生成Git shh key
查看>>
jenkins 使用磁盘检查插件 disk check plugin
查看>>