批量查询
<select id="getPreIds" resultType="java.lang.String"
parameterType="java.util.List">
SELECT pre_batch_id FROM public.mine_data_quality_check_record WHERE deleted=0
<if test="list != null">
AND pre_batch_id in (
<foreach collection="list" item="id" separator=",">
#{id}
</foreach>
)
</if>
GROUP BY pre_batch_id HAVING count(*)>2 ORDER BY pre_batch_id ASC
</select>
返回值类型不应该写List,抽象接口处写
批量更新
在这里插入代码片
<update id="batchUpdate" parameterType="java.util.List">
<foreach collection="list" item="item" separator=";">
UPDATE mine_evaluation SET
tb_area=#{item.tbArea},
pollution_soil_control=#{item.pollutionSoilControl},
pollution_soil=#{item.pollutionSoil},
pollution_sludge=#{item.pollutionSludge},
pollution_irrigation_water=#{item.pollutionIrrigationWater},
pollution_waste_water=#{item.pollutionWasteWater},
pollution_solid=#{item.pollutionSolid},
sample_count=#{item.sampleCount},
spot_count=#{item.spotCount},
is_pollution=#{item.isPollution},
is_country=#{item.isCountry},
is_wf=#{item.isWf} WHERE tbbh=#{item.tbbh}
</foreach>
</update>
经常会报错:
可能是数据太多了,要减少批量更新的数据!!!!!!!!!!
批量更新除了使用多线程之外,还应适当的添加索引
索引与批量更新的关系
当你在更新语句中使用 WHERE 子句来指定要更新的行时,索引可以帮助快速找到这些行。例如:
UPDATE table SET column = newValue WHERE id = someId;
如果 id 字段有索引,这条语句的执行会更快。
索引在某些情况下也可能减慢更新速度。因为每次更新操作不仅要修改数据,还要更新相关的索引。因此,如果更新的字段本身有索引,频繁的更新操作可能会导致索引维护的开销。