1.场景:对于几千上万条数据新增时,一般使用for循环一条一条进行 insert into 新增。但是这样不仅速度慢,还吃数据资源。
所以:修改成一次性的批量新增处理。
例如:
(1).以下这段语句
CREATE TABLE tmp_fep as
SELECT feeIds,'1' as xmid ,'1' as b
FROM (VALUES ('4'),('5')) AS cs (feeIds);
select *
FROM (VALUES
('计算机软件'),
('通信')
) as cs (fee_id)
结果:
解释:(VALUES ('4'),('5')) AS cs (feeIds) 相当于创建一张临时表,里面就只有“feeIds”这一个字段属性,其中格式要注意。
(2).现在想要再新增多条数据:
INSERT INTO tmp_fep
SELECT feeIds,'2' as xmid ,'2' as b
FROM (VALUES ('7'),('8')) AS cs (feeIds);
结果:
(3).针对于多类型新增数据时,可以用以下处理:
CREATE TABLE tmp_fep as
--INSERT INTO tmp_fep
SELECT feeIds,'2' as xmid ,'2' as b
FROM (VALUES ('7'),('8')) AS cs (feeIds)
UNION
SELECT feeIds,'3' as xmid ,'3' as b
FROM (VALUES ('7'),('8')) AS cs (feeIds);
结果:
假设:你有1万条数据要新增,但是他们都要新增不同得6个类型,总共就是6万条数据,那就得给这1万条数据
循环6次,就可以用上面得语句,“union” 6次,就可以做到一次性将6万条数据一次完成新增。
结束。
2.现在应用到业务代码逻辑中,
场景:假设有一万条数据,每条数据要配6个类型,那就等于我要新增6万条数据,那就可以用 6次 “union”得语句来做。
Service层:
myBatis sqlMapp:
<insert id="savePerformanceFeeProjectList">
INSERT INTO performance_fee_project_role(
performance_id,
fee_project_id,
accrual_type
)
<foreach collection="performanceFeeProjectList" item="pfp" separator=" union ">
SELECT
#{pfp.performanceId},
fee_id,
#{pfp.accrualType}
FROM (VALUES ${pfp.feeProjectIds} ) as cs (fee_id)
</foreach>
</insert>
3.删除:
逻辑跟新增一样。
4.更新: