Java删除数据数据量较大时逻辑分组处理,批量删除

时间:2025-03-20 13:21:23

说明:本文章主要是用于批量删除(批量添加修改类似),在Java逻辑中拆分

实现类

@Transactional
public void deleteByIds(){
    //集和里面存在了n项,n>1000
    List<String> ids = ("1","2","3","4",".....","n");
    if(ids != null && () > 0){
        (ids);
        int sizeNum = ();
        //数据分组,每200条分为一组,每组执行批量删除
        if(sizeNum > 200){
            int con = sizeNum % 200 == 0 ? sizeNum / 200 : sizeNum / 200 + 1;
            for(int a = 0; a < con; a++){
                int star = a * 200;
                int end = (a+1) * 200;
                if(end > sizeNum){
                    List<String> groupList = (star,sizeNum);
                    (groupList);
                } else {
                    List<String> groupList = (star,end);
                    (groupList);
                }
            }
        }else {
            (ids);
        }
    }
}

数据层接口

void deleteByIds(@Param("groupList") List<String> groupList);

xml文件

<!--批量删除日志-->
<select  >
    delete from BUSI_OPERATION_LOG_DATA
    where
      OPERATE_LOG_ID in
    <foreach item="item" index="index" collection="groupList" open="(" separator="," close=")">
        #{item}
    </foreach>
</select>

 

批量添加mybatis sql

<!-- 批量添加树按钮关系表  -->
<insert  parameterType="" useGeneratedKeys="false">
    INSERT INTO SF_ENTITY_LIST_MENU
    (RELATION_ID, ENTITY_LIST_ID, MENU_ID, MENU_INDEX, MENU_DISPLAY, NODE_TYPE,
    CREATE_DATE, CREATE_USER, UPDATE_DATE, UPDATE_USER, REMARK)
    <foreach collection ="list" index="index" item="item" separator="union all" >
        (SELECT
         #{,jdbcType=VARCHAR}, #{,jdbcType=VARCHAR}, #{,jdbcType=VARCHAR},
         #{,jdbcType=DECIMAL}, #{,jdbcType=DECIMAL}, #{,jdbcType=VARCHAR},
         #{,jdbcType=TIMESTAMP}, #{,jdbcType=VARCHAR},#{,jdbcType=TIMESTAMP},
         #{,jdbcType=VARCHAR}, #{,jdbcType=VARCHAR}
         FROM DUAL)
    </foreach >
</insert>

记录一下。。。。。。。。